cproj
cprojf, cproj, cprojl
在头文件 | | |
---|---|---|
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
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):