当前位置:嗨网首页>书籍在线阅读

33-复数_complex.h(C99)

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

B.5.2 复数: complex.h (C99)

C99标准支持复数计算,C11进一步支持了这个功能。实现除提供 _Complex 类型外还可以选择是否提供 _Imaginary 类型。在C11中,可以选择是否提供这两种类型。C99规定,实现必须提供 _Complex 类型,但是 _Imaginary 类型为可选,可以提供或不提供。附录B的参考资料VIII中进一步讨论了 C 如何支持复数。 complex.h 头文件中定义了表B.5.2所列的宏。

表B.5.2  `complex.h` 宏

| 宏 | 描述 | | :----- | :----- | :----- | :----- | | complex | 展开为类型关键字 _Complex | | _Complex_I | 展开为 const float _Complex 类型的表达式,其值的平方是 -1 | | imaginary | 如果支持虚数类型,展开为类型关键字 _Imaginary | | _Imaginary_I | 如果支持虚数类型,展开为 const float _Imaginary 类型的表达式,其值的平方是 -1 | | I | 展开为 _Complex_I_Imaginary_I |

对于实现复数方面,C和C++不同。C通过 complex.h 头文件支持,而C++通过 complex 头文件支持。而且,C++使用类来定义复数类型。

可以使用 STDC CX_LIMITED_RANGE 编译指令来表明是使用普通的数学公式(设置为 on 时),还是要特别注意极值(设置为 off 时):

#include <complex.h>
#pragma STDC CX_LIMITED_RANGE on

库函数分为3种: doublefloatlong double 。表B.5.3列出了 double 版本的函数。 floatlong double 版本只需要在函数名后面分别加上 fl 。即 csinf() 就是 csin()float 版本,而 csinl()csin()long double 版本。另外要注意,角度的单位是弧度。

表B.5.3 复数函数

| 原型 | 描述 | | :----- | :----- | :----- | :----- | | double complex cacos(double complex z); | 返回 z 的复数反余弦 | | double complex casin(double complex z); | 返回 z 的复数反正弦 | | double complex catan(double complex z); | 返回 z 的复数反正切 | | double complex ccos(double complex z); | 返回 z 的复数余弦 | | double complex csin(double complex z); | 返回 z 的复数正弦 | | double complex ctan(double complex z); | 返回 z 的复数正切 | | double complex cacosh(double complex z); | 返回 z 的复数反双曲余弦 | | double complex casinh(double complex z); | 返回 z 的复数反双曲正弦 | | double complex catanh(double complex z); | 返回 z 的复数反双曲正切 | | double complex ccosh(double complex z); | 返回 z 的复数双曲余弦 | | double complex csinh(double complex z); | 返回 z 的复数双曲正弦 | | double complex ctanh(double complex z); | 返回 z 的复数双曲正切 | | double complex cexp(double complex z); | 返回 ez 次幂复数值 | | double complex clog(double complex z); | 返回 z 的自然对数(以 e 为底)的复数值 | | double cabs(double complex z); | 返回 z 的绝对值(或大小) | | double complex cpows(double complex z, | double complex y); | 返回 zy 次幂 | | double complex csqrt(double complex z); | 返回 z 的复数平方根 | | double carg(double complex z); | 以弧度为单位返回 z 的相位角(或幅角) | | double cimag(double complex z); | 以实数形式返回 z 的虚部 | | double complex conj(double complex z); | 返回 z 的共轭复数 | | double complex cproj(double complex z); | 返回 z 在黎曼球面上的投影 | | double complex CMPLX(double x,double y); | 返回实部为 x 、虚部为 y 的复数( C11 ) | | double creal(double complex z); | 以实数形式返回 z 的实部 |