cprojf, cproj, cprojl
|
定义于头文件
<complex.h>
|
||
| (1) | (C99 起) | |
| (2) | (C99 起) | |
| (3) | (C99 起) | |
|
定义于头文件
<tgmath.h>
|
||
|
#define cproj( z )
|
(4) | (C99 起) |
z
在黎曼球面上的投影。
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
|