C99 标准对复数类型和复数运算的支持
最近写计算程序经常要用到复数运算,以前都是用 gsl 库中对复数运算的支持。这两天看了看C99 标准,发现C99 中对复数运算的支持还是蛮给力的,这里做个总结。C99 中引入了两个关键字 _Complex和 _Imaginary,并且定义了如下的复数类型:
#include <stdio.h>#include <complex.h>int main(void){ double _Complex a = 1.0 + 2.0 * I; double _Complex b = 5.0 + 4.0 * I; printf("a = %f + %fi\n", creal(a), cimag(a)); printf("b = %f + %fi\n", creal(b), cimag(b)); a *= b; printf("a * b = %f + %fi\n", creal(a), cimag(a)); a = csin(b); printf("sin(b) = %f + %fi\n", creal(a), cimag(a)); return 0;}除了这里用到的几个函数之外,gcc 提供的支持复数运算的函数还很多,这里总结如下。
函数名 简介
cacos() 反余弦
casin() 反正弦
catan() 反正切
ccos() 余弦
csin() 正弦
ctan() 正切
cacosh() 反双曲余弦
casinh() 反双曲正弦
catanh() 反双曲正切
ccosh() 双曲余弦
csinh() 双曲正弦
ctanh() 双曲正切
cexp() 指数函数
clog() 对数函数
cpow(x,y) x 的y 次方
csqrt 平方根
cabs 复数的模
carg 角
conj 共轭
cproj 投影
cimag 取虚部
creal 取实部