Для возведения в степень в С нет специальной операции, как в других языках.
Вместо этого предлагается использовать функцию 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.5→2,3.5→4), чтобы математическое ожидание разности между суммой исходных чисел и суммой округленных чисел было равна 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);
}