名稱空間
變體
操作

std::proj(std::complex)

來自 cppreference.com
< cpp‎ | 數值‎ | 複數
 
 
 
 
定義於標頭檔案 <complex>
template< class T >
std::complex<T> proj( const std::complex<T>& z );
(1) (C++11 起)
額外過載 (自 C++11 起)
定義於標頭檔案 <complex>
(A)
std::complex<float>       proj( float f );

std::complex<double>      proj( double f );

std::complex<long double> proj( long double f );
(直至 C++23)
template< class FloatingPoint >
std::complex<FloatingPoint> proj( FloatingPoint f );
(C++23 起)
template< class Integer >
std::complex<double> proj( Integer i );
(B)
1) 返回複數 z黎曼球面 上的投影。
對於大多數 zstd::proj(z) == z,但所有的複數無窮大,即使是其中一個分量為無窮大而另一個為 NaN 的數,都會變為正實數無窮大,(INFINITY, 0.0)(INFINITY, -0.0)。虛部(零)的符號是 std::imag(z) 的符號。
A,B) 為所有整數和浮點型別提供了額外的過載,它們被視為虛部為正零的複數。

目錄

[編輯] 引數

z - 複數型別的值
f - 浮點值
i - 整數值

[編輯] 返回值

1) z 在黎曼球面上的投影。
A) std::complex(f) 在黎曼球面上的投影。
B) std::complex<double>(i) 在黎曼球面上的投影。

[編輯] 注意

proj 函式透過將所有無窮大對映到一個(考慮到虛部零的符號),有助於模擬黎曼球面,並且應在任何可能對其他無窮大產生虛假結果的操作(尤其是比較)之前使用。

不需要完全按照 (A,B) 提供額外的過載。它們只需要足以確保對於它們的引數 num

  • 如果 num 具有標準(直到 C++23)浮點型別 T,則 std::proj(num) 的效果與 std::proj(std::complex<T>(num)) 相同。
  • 否則,如果 num 具有整數型別,則 std::proj(num) 的效果與 std::proj(std::complex<double>(num)) 相同。

[編輯] 示例

#include <complex>
#include <iostream>
 
int main()
{
    std::complex<double> c1(1, 2);
    std::cout << "proj" << c1 << " = " << std::proj(c1) << '\n';
 
    std::complex<double> c2(INFINITY, -1);
    std::cout << "proj" << c2 << " = " << std::proj(c2) << '\n';
 
    std::complex<double> c3(0, -INFINITY);
    std::cout << "proj" << c3 << " = " << std::proj(c3) << '\n';
}

輸出

proj(1,2) = (1,2)
proj(inf,-1) = (inf,-0)
proj(0,-inf) = (inf,-0)

[編輯] 參閱

返回複數的模
(函式模板) [編輯]
返回模的平方
(函式模板) [編輯]
從模和相角構造一個複數
(函式模板) [編輯]
C 文件 對於 cproj