Spec-Zone.ru › C

pow, powf, powl

Defined in header <math.h>
float powf( float base, float exponent );
(1) (since C99)
double pow( double base, double exponent );
(2)
long double powl( long double base, long double exponent );
(3) (since C99)
Defined in header <tgmath.h>
#define pow( base, exponent )
(4) (since C99)
1-3) Вычисляет значение base в степени exponent.
4) Универсальная макрокоманда: Если какой-либо аргумент имеет тип long double, вызывается powl. В противном случае, если какой-либо аргумент имеет целочисленный тип или тип double, вызывается pow. В противном случае вызывается powf. Если хотя бы один аргумент является комплексным или мнимым, то макрокоманда вызывает соответствующую комплексную функцию (cpowf, cpow, cpowl).

Параметры

base - основание как значение с плавающей точкой
exponent - показатель степени как значение с плавающей точкой

Возвращаемое значение

Если ошибок не произошло, возвращается base в степени exponent (baseexponent).

Если произошла ошибка области определения, возвращается определённое реализацией значение (NaN, где поддерживается).

Если произошла ошибка полюса или ошибка диапазона из-за переполнения, возвращается ±HUGE_VAL, ±HUGE_VALF, или ±HUGE_VALL.

Если произошла ошибка диапазона из-за недополнения, возвращается корректное результат (после округления).

Обработка ошибок

Ошибки сообщаются согласно спецификации в math_errhandling.

Если base конечно и отрицательно, а exponent конечно и нецелочисленно, возникает ошибка области определения, и может произойти ошибка диапазона.

Если base равно нулю, а exponent равно нулю, может возникнуть ошибка области определения.

Если base равно нулю, а exponent отрицательно, могут возникнуть ошибка области определения или ошибка полюса.

Если реализация поддерживает арифметику с плавающей запятой IEEE (IEC 60559),

  • pow(+0, exponent), где exponent — отрицательное нечётное целое число, возвращает +∞ и вызывает FE_DIVBYZERO
  • pow(-0, exponent), где exponent — отрицательное нечётное целое число, возвращает -∞ и вызывает FE_DIVBYZERO
  • pow(±0, exponent), где exponent отрицательно, конечно и является чётным целым числом или нецелым числом, возвращает +∞ и вызывает FE_DIVBYZERO
  • pow(±0, -∞) возвращает +∞ и может вызвать FE_DIVBYZERO(до C23)
  • pow(+0, exponent), где exponent — положительное нечётное целое число, возвращает +0
  • pow(-0, exponent), где exponent — положительное нечётное целое число, возвращает -0
  • pow(±0, exponent), где exponent положительно, не является целым или является положительным чётным целым числом, возвращает +0
  • pow(-1, ±∞) возвращает 1
  • pow(+1, exponent) возвращает 1 для любого exponent, даже когда exponent равно NaN
  • pow(base, ±0) возвращает 1 для любого base, даже когда base равно NaN
  • pow(base, exponent) возвращает NaN и вызывает FE_INVALID если base конечно и отрицательно, а exponent конечно и нецелочисленно.
  • pow(base, -∞) возвращает +∞ для любого |base|<1
  • pow(base, -∞) возвращает +0 для любого |base|>1
  • pow(base, +∞) возвращает +0 для любого |base|<1
  • pow(base, +∞) возвращает +∞ для любого |base|>1
  • pow(-∞, exponent) возвращает -0, если exponent — отрицательное нечётное целое число
  • pow(-∞, exponent) возвращает +0, если exponent — отрицательное нецелое или отрицательное чётное целое число
  • pow(-∞, exponent) возвращает -∞, если exponent — положительное нечётное целое число
  • pow(-∞, exponent) возвращает +∞, если exponent — положительное нецелое или положительное чётное целое число
  • pow(+∞, exponent) возвращает +0 для любого отрицательного exponent
  • pow(+∞, exponent) возвращает +∞ для любого положительного exponent
  • за исключением указанных выше случаев, если любой аргумент является NaN, возвращается NaN

Примечания

Хотя pow не может использоваться для получения корня отрицательного числа, cbrt предоставлена для распространённого случая, когда exponent равно 1/3.

Пример

#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <fenv.h>
 
#pragma STDC FENV_ACCESS ON
int main(void)
{
    // typical usage
    printf("pow(2, 10) = %f\n", pow(2,10));
    printf("pow(2, 0.5) = %f\n", pow(2,0.5));
    printf("pow(-2, -3) = %f\n", pow(-2,-3));
    // special values
    printf("pow(-1, NAN) = %f\n", pow(-1,NAN));
    printf("pow(+1, NAN) = %f\n", pow(+1,NAN));
    printf("pow(INFINITY, 2) = %f\n", pow(INFINITY, 2));
    printf("pow(INFINITY, -1) = %f\n", pow(INFINITY, -1));
    // error handling 
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("pow(-1, 1/3) = %f\n", pow(-1, 1.0/3));
    if(errno == EDOM)         perror("    errno == EDOM");
    if(fetestexcept(FE_INVALID)) puts("    FE_INVALID raised");
 
    feclearexcept(FE_ALL_EXCEPT);
    printf("pow(-0, -3) = %f\n", pow(-0.0, -3));
    if(fetestexcept(FE_DIVBYZERO)) puts("    FE_DIVBYZERO raised");
}

Возможный вывод:

pow(2, 10) = 1024.000000
pow(2, 0.5) = 1.414214
pow(-2, -3) = -0.125000
pow(-1, NAN) = nan
pow(+1, NAN) = 1.000000
pow(INFINITY, 2) = inf
pow(INFINITY, -1) = 0.000000
pow(-1, 1/3) = -nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised
pow(-0, -3) = -inf
    FE_DIVBYZERO raised

Справочные материалы

  • Стандарт C23 (ISO/IEC 9899:2023):
    • 7.12.7.5 Функции pow
    • 7.27 Универсальная математика <tgmath.h>
    • F.10.4.5 Функции pow (с. 524-525)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.12.7.4 Функции pow (с. 248-249)
    • 7.25 Универсальная математика <tgmath.h> (с. 373-375)
    • F.10.4.4 Функции pow (с. 524-525)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.12.7.4 Функции pow (с. 248-249)
    • 7.25 Универсальная математика <tgmath.h> (с. 373-375)
    • F.10.4.4 Функции pow (с. 524-525)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.12.7.4 Функции pow (с. 229)
    • 7.22 Универсальная математика <tgmath.h> (с. 335-337)
    • F.9.4.4 Функции pow (с. 461)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
    • 4.5.5.1 Функция pow

См. также

sqrtsqrtfsqrtl
(C99)(C99)
вычисляет квадратный корень (\(\small{\sqrt{x} }\)√x)
(функция)
cbrtcbrtfcbrtl
(C99)(C99)(C99)
вычисляет кубический корень (\(\small{\sqrt[3]{x} }\)3√x)
(функция)
hypothypotfhypotl
(C99)(C99)(C99)
вычисляет квадратный корень из суммы квадратов двух заданных чисел (\(\scriptsize{\sqrt{x^2+y^2} }\)√x2+y2)
(функция)
cpowcpowfcpowl
(C99)(C99)(C99)
вычисляет комплексную функцию степени
(функция)
Документация C++ для pow

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/math/pow

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API