非常教程

C参考手册

数值 | Numerics

cprojl

在头文件<math.h>中定义

float cprojf( float complex z );

(1)

(since C99)

double cproj( double complex z );

(2)

(since C99)

long double cprojl( long double complex z );

(3)

(since C99)

Defined in header <tgmath.h>

#define cproj( z )

(4)

(since C99)

1-3)计算z黎曼球上的投影。

4)式泛型宏:如果z具有类型long double complexlong double imaginarylong doublecprojl被调用。如果z有类型float complexfloat imaginary或者floatcprojf被调用。如果z有类型double complexdouble imaginarydouble,或任何整数类型,cproj被调用。

对于大多数情况zcproj(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

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。