C99标准中使用复数Complex库

C99标准中使用复数Complex库在ISO/IEC9899:1999标准(俗称C99)标准中引入了一个对于信号处理领域非常有用切使用起来也非常方便的库——复数库。对你的C语言编译器开启c99、gnu99、c11或gnu11任一一项之后在源文件中包含即可使用。

大家好,欢迎来到IT知识分享网。C99标准中使用复数Complex库"

在ISO/IEC9899:1999标准(俗称C99)标准中引入了一个对于信号处理领域非常有用切使用起来也非常方便的库——复数库。对你的C语言编译器开启c99、gnu99、c11或gnu11任一一项之后在源文件中包含<complex.h>即可使用。

C99标准中引入了两个用于描述复数的关键字——_Complex和_Imaginary。_Complex结合float与double使用来表示一个复数。由于我所用的GCC4.6版本尚未支持_Imaginary关键字(个人估计这辈子都不会支持了),因此在这里暂时先不多介绍。_Imaginary表示一个复数的虚部,个人估计用_Imaginary定义的数为一个纯虚数。

如果_Complex与一个float结合使用,那么其实数部分与虚数部分都是float类型。如果要用一个常量来表示一个单精度浮点的纯虚数其实可以这么写:1.0iF,这里的i与F即可以是大小也可以是小写,因此写为1.0if也没有任何问题,编译器不会蠢到把这个if当作为条件判断关键字。

如果_Complex与一个double结合使用,那么其实数部分与虚数部分都是double类型。如果要用一个常量来表示一个双精度浮点的纯虚数可以这么写:1.0i。

下面贴个代码片段,各位可以运行一下:

#include <math.h>
#include <stdio.h>
#include <complex.h>

int main(void)
{
    float _Complex f = -1.0f;
    f = csqrtf(f) + 1.0iF;
    printf("The complex number is: %g+i%g\n", crealf(f), cimagf(f));

    double _Complex d = cexp(2.0i * M_PI);
    printf("e^(i2PI) = %f+i%f\n", creal(d), cimag(d));
}

库函数中的creal(double _Complex)是取一个复数的实部;cimag(double _Complex)是取一个复数的虚部。

在C11标准中,提供了对复数的初始化器(Initializer),而在GCC中还能通过__real__与__imag__对分别对复数访问其实部和虚部。如下代码示例:

#include <complex.h>

int main(void)
{
    complex float cf = { 10.25f, -0.5f };
    printf("The real part is: %.2f, and the imaginary part is: %.2f\n", __real__(cf), __imag__(cf));
}

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33272.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信