C中的复数

时间:2012-03-21 14:59:31

标签: c

是否可以在C?中进行这样的计算?

A*exp(i*(b+c)) + D*exp(i*(e+f)),

其中A,b,c,D,e,f是实数。

3 个答案:

答案 0 :(得分:3)

C99 introduces support for complex numbers。你的编译器是否实现了这个功能,我不知道。

答案 1 :(得分:2)

通常,你不能用C表示实数。有无数个实数,但C在计算中只有有限的精度。也就是说,ISOC99有一种数据类型可以对这些边界内的复数进行操作。 http://www.gnu.org/software/libc/manual/html_node/Complex-Numbers.html

C99复数是相当有限的 - 它实际上只提供了乘以i的方法。 CMATH提供了一些优秀的扩展,其功能远远超过C99。 http://www.optivec.com/cmfuncs/

答案 2 :(得分:1)

C99 Standard(或C11 Standard)中的第7.3节处理复数。

示例代码

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

int main(void) {
    double A, b, c, D, e, f;
    complex double x;
    const complex double i = csqrt(-1);

    A = 1;
    b = 2;
    c = 3;
    D = 4;
    e = 5;
    f = 6;
    x = A * cexp(i * (b + c)) + D * cexp(i * (e + f));
    printf("value is %f + %fi\n", creal(x), cimag(x));
}

您可以看到在ideone上运行的代码:http://ideone.com/d7xD7

输出

value is 0.301365 + -4.958885i