std::proj(std::complex)
來自 cppreference.com
定義於標頭檔案 <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 ); |
(直至 C++23) | |
template< class FloatingPoint > std::complex<FloatingPoint> proj( FloatingPoint f ); |
(C++23 起) | |
template< class Integer > std::complex<double> proj( Integer i ); |
(B) | |
對於大多數 z,std::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
|