名稱空間
變體
操作

std::pow(std::complex)

來自 cppreference.com
< cpp‎ | 數值‎ | 複數
 
 
 
 
定義於標頭檔案 <complex>
template< class T >
std::complex<T> pow( const std::complex<T>& x, int y );
(1) (C++11 前)
template< class T >
std::complex<T> pow( const std::complex<T>& x, const std::complex<T>& y );
(2)
template< class T >
std::complex<T> pow( const std::complex<T>& x, const T& y );
(3)
template< class T >
std::complex<T> pow( const T& x, const std::complex<T>& y );
(4)
額外過載 (自 C++11 起)
定義於標頭檔案 <complex>
(A)
template< class T1, class T2 >

std::complex</* common-type */>

    pow( const std::complex<T1>& x, const std::complex<T2>& y );
(直至 C++23)
template< class T1, class T2 >

std::complex<std::common_type_t<T1, T2>>

    pow( const std::complex<T1>& x, const std::complex<T2>& y );
(C++23 起)
(B)
template< class T, class NonComplex >

std::complex</* common-type */>

    pow( const std::complex<T>& x, const NonComplex& y );
(直至 C++23)
template< class T, class NonComplex >

std::complex<std::common_type_t<T, NonComplex>>

    pow( const std::complex<T>& x, const NonComplex& y );
(C++23 起)
(C)
template< class T, class NonComplex >

std::complex</* common-type */>

    pow( const NonComplex& x, const std::complex<T>& y );
(直至 C++23)
template< class T, class NonComplex >

std::complex<std::common_type_t<T, NonComplex>>

    pow( const NonComplex& x, const std::complex<T>& y );
(C++23 起)
1-4) 計算複數 x 的複數次冪 y,其中第一個引數沿負實軸有分支割。非複數引數被視為虛部為正零的複數。
A-C) 提供了額外的過載。NonComplex 不是 std::complex 的特化。
(C++11 起)

目錄

[編輯] 引數

x - 底數
y - 指數

[編輯] 返回值

1-4) 如果沒有發生錯誤,則返回複數冪 xy
錯誤和特殊情況的處理方式如同操作由 std::exp(y * std::log(x)) 實現。
std::pow(0, 0) 的結果是實現定義的。
A-C)(2-4)

[編輯] 註解

過載 (1) 在 C++98 中提供,以匹配 std::pow 的額外過載 (2)。這些過載已透過 LWG 問題 550 的解決方案移除,過載 (1) 已透過 LWG 問題 844 的解決方案移除。

附加的過載不要求完全以 (A-C) 的形式提供。它們只需要足以確保對於其第一個引數 base 和第二個引數 exponent

如果 base 和/或 exponent 的型別為 std::complex<T>

  • 如果 base 和/或 exponent 的型別為 std::complex<long double>long double,則 std::pow(base, exponent) 的效果與 std::pow(std::complex<long double>(base),
             std::complex<long double>(exponent))
    相同。
  • 否則,如果 base 和/或 exponent 的型別為 std::complex<double>double 或整型,則 std::pow(base, exponent) 的效果與 std::pow(std::complex<double>(base),
             std::complex<double>(exponent))
    相同。
  • 否則,如果 base 和/或 exponent 的型別為 std::complex<float>float,則 std::pow(base, exponent) 的效果與 std::pow(std::complex<float>(base),
             std::complex<float>(exponent))
    相同。
(直至 C++23)

如果一個引數的型別為 std::complex<T1>,而另一個引數的型別為 T2std::complex<T2>,則 std::pow(base, exponent) 的效果與 std::pow(std::complex<std::common_type_t<T1, T2>>(base),
         std::complex<std::common_type_t<T1, T2>>(exponent))
相同。

如果 std::common_type_t<T1, T2> 未定義良好,則程式是病態的。

(C++23 起)

[編輯] 示例

#include <complex>
#include <iostream>
 
int main()
{
    std::cout << std::fixed;
 
    std::complex<double> z(1.0, 2.0);
    std::cout << "(1,2)^2 = " << std::pow(z, 2) << '\n';
 
    std::complex<double> z2(-1.0, 0.0); // square root of -1
    std::cout << "-1^0.5 = " << std::pow(z2, 0.5) << '\n';
 
    std::complex<double> z3(-1.0, -0.0); // other side of the cut
    std::cout << "(-1,-0)^0.5 = " << std::pow(z3, 0.5) << '\n';
 
    std::complex<double> i(0.0, 1.0); // i^i = exp(-pi / 2)
    std::cout << "i^i = " << std::pow(i, i) << '\n';
}

輸出

(1,2)^2 = (-3.000000,4.000000)
-1^0.5 = (0.000000,1.000000)
(-1,-0)^0.5 = (0.000000,-1.000000)
i^i = (0.207880,0.000000)

[編輯] 參閱

右半平面範圍內的復平方根
(函式模板) [編輯]
(C++11)(C++11)
將數字提升到給定冪(xy
(函式) [編輯]
將函式 std::pow 應用於兩個 valarray 或一個 valarray 和一個值
(函式模板) [編輯]
C 文件 關於 cpow