https://www.cnblogs.com/wuyudong/p/c99-new-feature.html
1.复数(complex)
complex.h是C标准函数库中的头文件,提供了复数算术所需要的宏定义与函数声明。
#definecomplex _Complex#define_Complex_I ((const float _Complex)__I__)#defineI _Complex_I
C99规定了关键字_Complex。因而有3种复数类型:
double _Complex
float _Complex
long double _Complex
次序不是必须遵守的,比如float _Complex也可以写成_Complex float。_Complex_I扩展为类型为const float _Complex的常量值,其值为虚数单位。C99规定complex作为宏扩展为_Complex。但C++未定义complex宏。gcc仅支持complex type,不支持imaginary type。因此宏I扩展为_Complex_I。
<complex.h>里面还包含了不少支持复数的数学函数(c打头的就是):
1、ccos,csin,ctan,cacos,casin,catan:复数域内的三角函数,有对应的f和l版本。
2、ccosh,csinh,ctanh,cacosh,casinh,catanh:复数域内的双曲函数,有对应的f和l版本。
3、cexp,clog,cabs,cpow,csqrt:复数域内的指数、对数、绝对值、幂函数,有对应的f和l版本。
4、carg,cimag,creal,conj,cproj:获取象限角、虚数部分、实数部分、a=x及b=-y、Riemann球上的投影,有对应的f和l版本。
代码:
#include#includeint main()
{
doublecomplex cmp =1.3+2.3*I;
printf("%f + %fi\n", creal(cmp), cimag(cmp));
return0;
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
1、_Complex是一种新增的数据类型,用来表示复数。C99
新增了复数类型(_Complex)和虚数类型(_Imaginary)。简单来说,C99 提供了三种复数类型:
float _Complex,double _Complex,和 long double _Complex。
对于float _Complex类型的变量来说,它包含两个 float类型的值,一个用于表示复数的实部(real part),
另一个用于表示虚部(imaginary part)。类似地,double _Complex 包含两个 double类型的值。
C99也提供了三种虚数类型:float _Imaginary,double _Imaginary,以及 long double_Imaginary。
虚数类型只有虚部,没有实部。
2、包含标准头文件 complex.h 后,就可以用 complex来代表 _Complex,用imaginary来代表 _Imaginary,以及用 I来代表虚数单位 i,也就是 -1的平方根。例如:
#include <complex.h>
double _Complex x = 5.2;
double complex y = 5.0 * I;
double complex z = 5.2 – 5.0 * I;
3、
注意:_Complex类型对于独立式环境(freestanding
environment)来说是可选的。可选的意思是,不强制必须支持这种类型。而所谓独立式环境,是指 C
程序可以在没有操作系统的情况下运行。_Imaginary类型在任何环境下都是可选的。目前的编译器对这两种类型的支持都不太好。