# std::proj(std::complex)

< cpp‎ | numeric‎ | complex

定义于头文件 `<complex>` |  |
template< class T > std::complex<T> proj( const std::complex<T>& z ); | (1) | (C++11 起)
std::complex<long double> proj( long double z ); | (2) | (C++11 起)
template< class DoubleOrInteger > std::complex<double> proj( DoubleOrInteger z ); | (3) | (C++11 起)
std::complex<float> proj( float z ); | (4) | (C++11 起)

返回复数 `z` 在黎曼球面上的投影。

对于绝大多数 `z` ， std::proj(z)==z ，但所有复无穷大，即使是一部为无穷大而另一部为 NaN 者，都变成实正无穷大 (INFINITY, 0.0) 或 (INFINITY, -0.0) 。虚部（零）的符号是 std::imag(z) 的符号。

为 float 、 double 、 long double 和所有整数类型提供额外重载，将它们当做拥有正零虚部的复数。

### 参数

z | - | 复数值

### 返回值

`z` 在黎曼球面上的投影

### 注意

proj 函数以映射所有无穷大到一（给出或接收虚数零的符号），帮助模拟黎曼球面，而且应该在任何操作，特别是比较浅使用，比较可能对任何其他无穷大给出虚假结果。

### 示例

    #include <iostream>
    #include <complex>

    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)

### 参阅

abs(std::complex) | 返回复数的模 (函数模板)
norm | 返回模(范数)的平方 (函数模板)
polar | 从模和辐角构造复数 (函数模板)