Namespaces
Variants

std:: proj (std::complex)

From cppreference.net
定义于头文件 <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 黎曼球面 上的投影。
对于大多数 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