Spec-Zone.ru › C

pow, powf, powl

Определено в заголовочном файле <math.h>
float powf( float base, float exponent );
(1) (начиная с C99)
double pow( double base, double exponent );
(2)
long double powl( long double base, long double exponent );
(3) (начиная с C99)
Определено в заголовочном файле <tgmath.h>
#define pow( base, exponent )
(4) (начиная с 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 <errno.h>
#include <fenv.h>
#include <math.h>
#include <stdio.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:2024):
    • 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/c/numeric/math/pow

Spec-Zone.ru

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