cprojf, cproj, cprojl

来自cppreference.com
< c‎ | numeric‎ | complex
 
 
 
复数算术
类型与虚数常量
(C99)
(C11)
(C99)
操作
(C99)
(C99)
(C99)
(C99)
(C99)
cproj
(C99)
幂与指数函数
(C99)
(C99)
(C99)
(C99)
三角函数
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
双曲函数
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
 
在标头 <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 complexlong double imaginarylong double 类型,则调用 cprojl 。若 z 拥有 float complexfloat imaginaryfloat 类型,则调用 cprojf 。若 z 拥有 double complexdouble imaginarydouble 或任何整数类型,则调用 cproj

对于绝大多数 zcproj(z)==z ,但所有复无穷大,即使是一部为无穷大而另一部为 NaN 者,都变为正实无穷大, INFINITY+0.0*IINFINITY-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 The cproj functions (第 198 页)
  • 7.25 Type-generic math <tgmath.h> (第 373-375 页)
  • G.7 Type-generic math <tgmath.h> (第 545 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.3.9.4 The cproj functions (第 179 页)
  • 7.22 Type-generic math <tgmath.h> (第 335-337 页)
  • G.7 Type-generic math <tgmath.h> (第 480 页)

参阅