POW(3)

ИМЯ
pow, powf, powl - функции возведения в степень

ОБЗОР
#include <math.h>

double pow(double x, double y);
float powf(float x, float y);
long double powl(long double x, long double y);

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

powf(), powl():
    _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L;
    или cc -std=c99

ОПИСАНИЕ
Данные функции возвращают значение x, возведённое в степень y.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении данные функции возвращают значение x, возведённое в степень y. Если x — конечное значение меньшее 0 и y — конечное не целое, то будет сгенерирована ошибка выхода за пределы области, а в качестве результата будет возвращено NaN. Если происходит переполнение результата, возникает ошибка диапазона, а функция возвращает HUGE_VAL, HUGE_VALF или HUGE_VALL, соответственно, с математически правильным знаком. Если в результате исчезает порядок числа и он не представим, то возникает ошибка диапазона и возвращается 0.0. За исключениями, указанными далее, если значение x или y равно NaN, то результат равен NaN. Если x равно +1, то результат равен 1.0 (даже если y равно NaN). Если y равно 0, то результат равен 1.0 (даже если x равно NaN). Если x равно +0 (-0) и y — нечётное целое большее 0, то результат равен +0 (-0). Если x равно 0 и y больше 0 и не чётное целое, то результат равен +0. Если x равно -1 и y стремится к плюс или минус бесконечности, то результат равен 1.0. Если абсолютное значение x меньше 1 и y стремится к минус бесконечности, то результат стремится к плюс бесконечности. Если абсолютное значение x больше 1 и y стремится к минус бесконечности, то результат равен +0. Если абсолютное значение x меньше 1 и y стремится к плюс бесконечности, то результат равен +0. Если абсолютное значение x больше 1 и y стремится к плюс бесконечности, то результат стремится к плюс бесконечности. Если x стремится к минус бесконечности и y — нечётное целое меньшее 0, то результат равен -0. Если x стремится к минус бесконечности и y — меньше 0 и чётное целое, то результат равен +0. Если x стремится к минус бесконечности и y — нечётное целое большее 0, то результат стремится к минус бесконечности. Если x стремится к минус бесконечности и y — больше 0 и чётное целое, то результат стремится к плюс бесконечности. Если x стремится к плюс бесконечности и y — меньше 0, то результат равен +0. Если x стремится к плюс бесконечности и y — больше 0, то результат стремится к плюс бесконечности. Если x равно +0 или -0 и y — нечётное целое меньшее 0, то генерируется ошибка особой точки и возвращается HUGE_VAL, HUGE_VALF или HUGE_VALLс тем же знаком что и у x. Если x равно + или -0 и y — меньше 0 и чётное целое, то генерируется ошибка особой точки и возвращается +HUGE_VAL, +HUGE_VALF или +HUGE_VALL.

ОШИБКИ
Смотрите math_error(7), чтобы определить, где возникла ошибка при вызове этих функций.

Могут возникать следующие ошибки:

Ошибка области: x является отрицательным и y конечное нецелое
    errno устанавливается в EDOM. Возникает исключение неправильной плавающей запятой (FE_INVALID).

Ошибка особой точки: x равно нулю и y отрицательно
    errno устанавливается в ERANGE (но смотрите ДЕФЕКТЫ). Возникает исключение деления плавающей запятой на ноль (FE_DIVBYZERO).

Ошибка диапазона: результат превысил разрядность
    Значение errno устанавливается в ERANGE. Возникает исключение переполнения плавающей запятой (FE_OVERFLOW).

Ошибка диапазона: результат потерял разрядность
    Значение errno устанавливается в ERANGE. Возникает исключение исчезновение порядка плавающей запятой (FE_UNDERFLOW).

АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение
pow(), powf(), powl() | безвредность в нитях | безвредно (MT-Safe)

СООТВЕТСТВИЕ СТАНДАРТАМ
C99, POSIX.1-2001, POSIX.1-2008. Вариант, возвращающий значение типа double, также соответствует SVr4, 4.3BSD, C89.

ДЕФЕКТЫ
На 64-битных архитектурах pow() может быть медленнее более чем в 10000 раз для некоторых значений (очень редких). Это происходит только с pow(), и отсутствует у powf() и powl(). В glibc 2.9 и ранее при возникновении ошибки особой точки, значению errno присваивается EDOM вместо ERANGE согласно POSIX. Начиная с версии 2.10, в glibc это исправлено. Если x отрицательно, то большие отрицательные или положительные значения y приводят к результату NaN, с присвоением errno значения EDOM или исключению неправильной плавающей запятой (FE_INVALID). Например для pow() такое случает когда абсолютное значение y больше 9.223373e18. В glibc версии 2.3.2 или старее при возникновении ошибки переполнения или потери разрядов функция pow() кроме исключения переполнения или потери генерирует необоснованное исключение неправильной плавающей запятой (FE_INVALID).

СМОТРИТЕ ТАКЖЕ
cbrt(3), cpow(3), sqrt(3)