Обработка математики: 38%
 

printОперации

printМатематические функции

Для возведения в степень в С нет специальной операции, как в других языках. Вместо этого предлагается использовать функцию pow(x,y) возвращающую значение xy. Для использования этой функции необходимо подключить заголовочный файл <math.h>:

#include <math.h>
#include <stdio.h>
int main()
{
  double x=1.00001,y=5;
  double z=pow(x,y);
  printf("%.20lf",z);
}
Ввод:

Выполнить
Вывод:

При возведении в степень будет ошибка, если y имеет дробную часть, а x – отрицательное.

Существуют несколько вариантов этой функции для каждого из 6 вещественных типов в языке С, названия вариантов отличаются суффиксом или префиксом: pow, powl, powf, сpow, сpowl, сpowf. Префикс c указывает на вариант функции для комплексных чисел, суффикс f на вариант функции для типа float, суффикс l - для типа long double, а если суффикс отсутствует, то это вариант для типа double.

Чтобы уменьшить путаницу, в С99 был добавлен заголовочный файл <tgmath.h>, в котором компилятор сам определяет, какой вариант функции нужно вызвать в зависимости от типа аргумента, и нужно писать только базовое имя математической функции без суффиксов и префиксов. В С++ компилятор всегда сам выбирает вариант функции.

Функция Описание
fabs(x) |x| абсолютная величина, модуль числа
ceil(x) x потолок, "округление" вверх
floor(x) x пол, "округление" вниз
round(x) округление к ближайшему целому, .5 к большему по модулю
roundeven(x) "бухгалтерское": при .5 выбирается ближайшее четное (2.52,3.54),
чтобы математическое ожидание разности между суммой исходных чисел и суммой округленных чисел было равна 0
trunc(x) целая часть числа [x]
дробная часть числа {x} может вычислена как (x-trunc(x))
fmod(x,y) остаток от деления x на y для вещественных чисел: x-[x/y]y
дробная часть числа {x} может вычислена как fmod(x,1.0)
fmax(x,y) max
fmin(x,y) min(x,y)
pow(x,y) x^y
exp(x) e^x
exp2(x) 2^x
log(x) ln x
log10(x) "lg"\ x
log2(x) log_2 x
sqrt(x) sqrt x
cbrt(x) root 3 x
sin(x) sin x, x в радианах
cos(x) cos x
tan(x) "tg"\ x
asin(x) arcsin x
acos(x) arccos x
atan(x) "arctg"\ x, результат в [ -pi/2; +pi/2 ]
atan2(y,x) "arctg"\ y/x, результат в [ -pi; +pi ]
hypot(x,y) sqrt{x^2+y^2}
creal(z) вещественная часть комплексного числа
cimag(z) мнимая часть комплексного числа

Функции atan2 и hypot удобно использовать для перевода из декартовых в полярные координаты. Кроме указанных в таблице функций, есть функций для вычисления гиперболических функций и некоторых других редко используемых.

Для получения модуля целых чисел в заголовочном файле <stdlib.h> определены функции abs, labs и llabs. Использование для вещественных чисел abs вместо fabs может привести к ошибке.

#include <tgmath.h>
#include <stdio.h>
int main()
{
  double x=1,y=5;
  double r,phi;
  // перевод в полярные координаты
  r=hypot(x,y);
  phi=atan2(y,x);
  printf("Радиус %.6lf Угол %.6lf\n",r,phi);
  // перевод в декартовы координаты
  x=r*cos(phi);
  y=r*sin(phi);
  printf("x=%.6lf y=%.6lf\n",x,y);
}
Ввод:

Выполнить
Вывод:
loading