代码之家  ›  专栏  ›  技术社区  ›  Erkan Haspulat

在C中计算e^(-j)

  •  4
  • Erkan Haspulat  · 技术社区  · 15 年前

    我需要用C来计算假想指数。

    据我所知,在C语言中没有复杂的数字库,可以得到 e^x 具有 exp(x) 属于 math.h 但是我如何计算 e^(-i) 在哪里 i = sqrt(-1) ?

    7 回复  |  直到 12 年前
        1
  •  7
  •   avpaderno    13 年前

    注意复数的指数等于:

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

    然后:

    e^(-i) = cos(-1)+i*sin(-1)
    
        2
  •  15
  •   Thomas    15 年前

    在C99中,有一个 complex 类型。包括 complex.h ;您可能需要与 -lm 关于海湾合作委员会。请注意,Microsoft Visual C不支持 复杂的 如果你需要使用这个编译器,也许你可以在一些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 更多信息。

        3
  •  6
  •   Jack    15 年前

    使用 欧拉公式 你有那个 e^-i == cos(1) - i*sin(1)

        4
  •  2
  •   Paul R    15 年前

    e^-j 只是 cos(1) - j*sin(1) ,所以您可以使用实函数生成实部和虚部。

        5
  •  1
  •   Tom    15 年前

    只用笛卡尔形式

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

    re(z) = m * cos(arg);
    im(z) = m * sin(arg);
    
        6
  •  1
  •   Lucas    15 年前

    调用C++函数是解决方案吗?C++ STL有一个很好的复杂类,Boost也提供了一些不错的选择。在C++中编写函数并声明为“外部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;
    }
    
        7
  •  0
  •   AntiPro    12 年前

    在C++中,它可以直接完成:STD::EXP(STD::复数(0,1));