Namespaces
Variants

cprojf, cproj, cprojl

From cppreference.net
定义于头文件 <complex.h>
float complex cprojf ( float complex z ) ;
(1) (C99 起)
double complex cproj ( double complex z ) ;
(2) (C99 起)
long double complex cprojl ( long double complex z ) ;
(3) (C99 起)
定义于头文件 <tgmath.h>
#define cproj( z )
(4) (C99 起)
1-3) 计算 z 在黎曼球面上的投影。
4) 类型泛型宏:若 z 具有类型 long double complex long double imaginary long double ,则调用 cprojl 。若 z 具有类型 float complex float imaginary float ,则调用 cprojf 。若 z 具有类型 double complex double imaginary double 或任何整数类型,则调用 cproj

对于大多数 z cproj ( z ) == z 成立,但所有复数无穷大——即使实部或虚部为NaN的无穷大——都会被转换为正实无穷大,即 INFINITY + 0.0 * I INFINITY - 0.0 * I 。其中虚部(零)的符号与 cimag ( z ) 的符号保持一致。

目录

参数

z - 复参数

返回值

z 在黎曼球面上的投影。

此函数对所有可能的输入均有完整规范定义,且不受 math_errhandling 中所述任何错误条件的影响

注释

cproj 函数通过将所有无穷大映射为一个(考虑虚部零点的符号差异),有助于建立黎曼球面模型。该函数应在任何可能对其他无穷大产生伪结果的操作(特别是比较操作)之前使用。

示例

#include <stdio.h>
#include <complex.h>
#include <math.h>
int main(void)
{
    double complex z1 = cproj(1 + 2*I);
    printf("cproj(1+2i) = %.1f%+.1fi\n", creal(z1),cimag(z1));
    double complex z2 = cproj(INFINITY+2.0*I);
    printf("cproj(Inf+2i) = %.1f%+.1fi\n", creal(z2),cimag(z2));
    double complex z3 = cproj(INFINITY-2.0*I);
    printf("cproj(Inf-2i) = %.1f%+.1fi\n", creal(z3),cimag(z3));
}

输出:

cproj(1+2i) = 1.0+2.0i
cproj(Inf+2i) = inf+0.0i
cproj(Inf-2i) = inf-0.0i

参考文献

  • C11 标准 (ISO/IEC 9899:2011):
  • 7.3.9.5 cproj 函数 (p: 198)
  • 7.25 泛型数学 <tgmath.h> (p: 373-375)
  • G.7 泛型数学 <tgmath.h> (p: 545)
  • C99 标准 (ISO/IEC 9899:1999):
  • 7.3.9.4 cproj 函数 (p: 179)
  • 7.22 泛型数学 <tgmath.h> (p: 335-337)
  • G.7 泛型数学 <tgmath.h> (p: 480)

参考

C++ 文档 关于 proj