名稱空間
變體
操作

std::pow, std::powf, std::powl

來自 cppreference.com
< cpp‎ | 數值‎ | 數學
 
 
 
常用數學函式
函式
基本操作
(C++11)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
指數函式
(C++11)
(C++11)

(C++11)
(C++11)
冪函式
(C++11)
(C++11)
pow
三角
雙曲函式
(C++11)
(C++11)
(C++11)

誤差函式和伽馬函式
(C++11)
(C++11)
(C++11)
(C++11)
取整浮點運算
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
浮點操縱函式
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)
分類和比較
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
型別
(C++11)
(C++11)
(C++11)
宏常量
分類
(C++11)(C++11)(C++11)(C++11)(C++11)


 
定義於標頭檔案 <cmath>
(1)
float       pow ( float base, float exp );

double      pow ( double base, double exp );

long double pow ( long double base, long double exp );
(直至 C++23)
/* 浮點型別 */

            pow ( /* 浮點型別 */ base,

                  /* 浮點型別 */ exp )
(C++23 起)
(C++26 起為 constexpr)
float       pow ( float base, int exp );

double      pow ( double base, int exp );

long double pow ( long double base, int exp );
(2) (C++11 前)
float       powf( float base, float exp );
(3) (C++11 起)
(C++26 起為 constexpr)
long double powl( long double base, long double exp );
(4) (C++11 起)
(C++26 起為 constexpr)
額外過載 (自 C++11 起)
定義於標頭檔案 <cmath>
template< class Arithmetic1, class Arithmetic2 >

/* common-floating-point-type */

            pow ( Arithmetic1 base, Arithmetic2 exp );
(A) (C++26 起為 constexpr)
1-4) 計算 baseexp 次冪的值。 庫為所有 cv-unqualified 浮點型別提供了 std::pow 的過載,作為引數 baseexp 的型別。(自 C++23 起)
A) 為所有其他算術型別組合提供了附加過載。
(C++11 起)

目錄

[編輯] 引數

base - 底數,一個浮點或整數值
exp - 指數,一個浮點或整數值

[編輯] 返回值

如果未發生錯誤,則返回 baseexp 次冪 (baseexp
)。

如果發生域錯誤,則返回實現定義的值 (支援 NaN 時返回 NaN)。

如果發生極點錯誤或因溢位導致的範圍錯誤,則返回 ±HUGE_VAL±HUGE_VALF±HUGE_VALL

如果因下溢發生範圍錯誤,則返回正確結果(舍入後)。

[編輯] 錯誤處理

錯誤按 math_errhandling 指定的方式報告。

如果 base 是有限負數且 exp 是有限非整數,則發生域錯誤,並可能發生範圍錯誤。

如果 base 為零且 exp 為零,則可能發生域錯誤。

如果 base 為零且 exp 為負數,則可能發生域錯誤或極點錯誤。

如果實現支援 IEEE 浮點運算 (IEC 60559),

  • pow(+0, exp),其中 exp 是負奇整數,返回 +∞ 並引發 FE_DIVBYZERO
  • pow(-0, exp),其中 exp 是負奇整數,返回 -∞ 並引發 FE_DIVBYZERO
  • pow(±0, exp),其中 exp 是負數、有限,並且是偶數整數或非整數,返回 +∞ 並引發 FE_DIVBYZERO
  • pow(±0, -) 返回 +∞ 並可能引發 FE_DIVBYZERO
  • pow(+0, exp),其中 exp 是正奇整數,返回 +0。
  • pow(-0, exp),其中 exp 是正奇整數,返回 -0。
  • pow(±0, exp),其中 exp 是正非整數或正偶整數,返回 +0。
  • pow(-1, ±∞) 返回 1。
  • pow(+1, exp) 對任何 exp 返回 1,即使 exp 是 NaN。
  • pow(base, ±0) 對任何 base 返回 1,即使 base 是 NaN。
  • pow(base, exp) 返回 NaN 並引發 FE_INVALID,如果 base 是有限負數且 exp 是有限非整數。
  • pow(base, -) 對於任何 |base| < 1 返回 +∞。
  • pow(base, -) 對於任何 |base| > 1 返回 +0。
  • pow(base, +) 對於任何 |base| < 1 返回 +0。
  • pow(base, +) 對於任何 |base| > 1 返回 +∞。
  • pow(-∞, exp) 返回 -0,如果 exp 是負奇整數。
  • pow(-∞, exp) 返回 +0,如果 exp 是負非整數或負偶整數。
  • pow(-∞, exp) 返回 -∞,如果 exp 是正奇整數。
  • pow(-∞, exp) 返回 +∞,如果 exp 是正非整數或正偶整數。
  • pow(+∞, exp) 對任何負 exp 返回 +0。
  • pow(+∞, exp) 對任何正 exp 返回 +∞。
  • 除上述指定情況外,如果任何引數為 NaN,則返回 NaN。

[編輯] 註記

C++98 在 C pow() 的基礎上添加了 exp 型別為 int 的過載,且 std::pow(float, int) 的返回型別為 float。然而,C++11 引入的額外過載指定 std::pow(float, int) 應該返回 doubleLWG issue 550 旨在解決此衝突,解決方案是移除額外的 int exp 過載。

儘管 std::pow 不能用於獲取負數的根,但 std::cbrt 提供了當 exp 為 1/3 時的常見情況。

額外過載不要求完全按 (A) 提供。它們只需足以確保對於其第一引數 num1 和第二引數 num2

  • 如果 num1num2 的型別為 long double,則 std::pow(num1, num2) 具有與 std::pow(static_cast<long double>(num1),
             static_cast<long double>(num2))
    相同的效果。
  • 否則,如果 num1 和/或 num2 的型別為 double 或整數型別,則 std::pow(num1, num2) 具有與 std::pow(static_cast<double>(num1),
             static_cast<double>(num2))
    相同的效果。
  • 否則,如果 num1num2 的型別為 float,則 std::pow(num1, num2) 具有與 std::pow(static_cast<float>(num1),
             static_cast<float>(num2))
    相同的效果。
(直至 C++23)

如果 num1num2 具有算術型別,則 std::pow(num1, num2) 具有與 std::pow(static_cast</*common-floating-point-type*/>(num1),
         static_cast</*common-floating-point-type*/>(num2))
相同的效果,其中 /*common-floating-point-type*/ 是浮點型別,其 浮點轉換等級浮點轉換子等級num1num2 的型別之間最高,整數型別引數被視為與 double 具有相同的浮點轉換等級。

如果不存在具有最高等級和次等級的浮點型別,則過載決議不會從提供的過載中產生可用的候選函式。

(C++23 起)

[編輯] 示例

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>
// #pragma STDC FENV_ACCESS ON
 
int main()
{
    // typical usage
    std::cout << "pow(2, 10) = " << std::pow(2, 10) << '\n'
              << "pow(2, 0.5) = " << std::pow(2, 0.5) << '\n'
              << "pow(-2, -3) = " << std::pow(-2, -3) << '\n';
 
    // special values
    std::cout << "pow(-1, NAN) = " << std::pow(-1, NAN) << '\n'
              << "pow(+1, NAN) = " << std::pow(+1, NAN) << '\n'
              << "pow(INFINITY, 2) = " << std::pow(INFINITY, 2) << '\n'
              << "pow(INFINITY, -1) = " << std::pow(INFINITY, -1) << '\n';
 
    // error handling
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
 
    std::cout << "pow(-1, 1/3) = " << std::pow(-1, 1.0 / 3) << '\n';
    if (errno == EDOM)
        std::cout << "    errno == EDOM " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_INVALID))
        std::cout << "    FE_INVALID raised\n";
 
    std::feclearexcept(FE_ALL_EXCEPT);
 
    std::cout << "pow(-0, -3) = " << std::pow(-0.0, -3) << '\n';
    if (std::fetestexcept(FE_DIVBYZERO))
        std::cout << "    FE_DIVBYZERO raised\n";
}

可能的輸出

pow(2, 10) = 1024
pow(2, 0.5) = 1.41421
pow(-2, -3) = -0.125
pow(-1, NAN) = nan
pow(+1, NAN) = 1
pow(INFINITY, 2) = inf
pow(INFINITY, -1) = 0
pow(-1, 1/3) = -nan
    errno == EDOM Numerical argument out of domain
    FE_INVALID raised
pow(-0, -3) = -inf
    FE_DIVBYZERO raised

[編輯] 參閱

(C++11)(C++11)
計算平方根(x
(函式) [編輯]
(C++11)(C++11)(C++11)
計算立方根(3x
(函式) [編輯]
(C++11)(C++11)(C++11)
計算斜邊 x2
+y2
x2
+y2
+z2
(自 C++17 起)

(函式) [編輯]
複數冪,一個或兩個引數可以是複數
(函式模板) [編輯]
將函式 std::pow 應用於兩個 valarray 或一個 valarray 和一個值
(函式模板) [編輯]
C 文件 關於 pow