在C中计算e ^( - j)

时间:2010-05-14 14:25:10

标签: c complex-numbers exponential

我需要在C中计算虚指数。

据我所知,C中没有复杂的数字库。e^x exp(x) math.h可以得到e^(-i),但我如何计算{的值? {1}},其中i = sqrt(-1)

7 个答案:

答案 0 :(得分:15)

在C99中,有complex类型。包括complex.h;你可能需要在gcc上链接-lm。请注意,Microsoft Visual C不支持complex;如果你需要使用这个编译器,也许你可以使用一些C ++并使用complex模板。

I被定义为虚数单位,cexp进行取幂。完整代码示例:

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

int main() {
    complex x = cexp(-I);
    printf("%lf + %lfi\n", creal(x), cimag(x));
    return 0;
}

有关详细信息,请参阅man 7 complex

答案 1 :(得分:7)

请注意,复数的指数等于:

e^(ix) = cos(x)+i*sin(x)

然后:

e^(-i) = cos(-1)+i*sin(-1)

答案 2 :(得分:6)

使用 Euler公式,您拥有e^-i == cos(1) - i*sin(1)

答案 3 :(得分:2)

e^-j只是cos(1) - j*sin(1),因此您只需使用实际函数生成实部和虚部。

答案 4 :(得分:1)

只需使用笛卡尔形式

如果z = m*e^j*(arg);

re(z) = m * cos(arg);
im(z) = m * sin(arg);

答案 5 :(得分:1)

为您调用c ++函数是一种解决方案吗? C ++ STL有一个很好的复杂类,并且还必须提供一些不错的选项。用C ++编写函数并将其声明为“extern C”

extern "C" void myexp(float*, float*);

#include <complex>

using std::complex;

void myexp (float *real, float *img )
{
  complex<float> param(*real, *img);
  complex<float> result = exp (param);
  *real = result.real();
  *img = result.imag();
}

然后你可以从你所依赖的任何C代码中调用该函数(Ansi-C,C99,...)。

#include <stdio.h>

void myexp(float*, float*);

int main(){
    float real = 0.0;
    float img = -1.0;
    myexp(&real, &img);
    printf ("e^-i = %f + i* %f\n", real, img);
    return 0;
}

答案 6 :(得分:0)

在C ++中,它可以直接完成:std :: exp(std :: complex(0,-1));