4

Cで虚数指数を計算する必要があります。

私の知る限り、Cには複素数ライブラリはありません。のを取得e^xすることは可能exp(x)ですmath.hが、どうすればの値を計算できe^(-i)ますi = sqrt(-1)か?

4

7 に答える 7

16

C99にはcomplexタイプがあります。含めるcomplex.h; -lmgccでリンクする必要があるかもしれません。MicrosoftVisualCは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してください。

于 2010-05-14T14:36:02.213 に答える
8

複素数の指数は次の値に等しいことに注意してください。

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

それで:

e^(-i) = cos(-1)+i*sin(-1)
于 2010-05-14T14:29:19.497 に答える
6

オイラーの公式を使用すると、それがありますe^-i == cos(1) - i*sin(1)

于 2010-05-14T14:30:18.200 に答える
2

e^-jはだけcos(1) - j*sin(1)なので、実関数を使用して実数部と虚数部を生成できます。

于 2010-05-14T14:33:47.403 に答える
1

デカルトフォームを使用するだけです

もしもz = m*e^j*(arg);

re(z) = m * cos(arg);
im(z) = m * sin(arg);
于 2010-05-14T14:30:46.170 に答える
1

C ++関数を呼び出すことはあなたのための解決策ですか?C ++ STLには優れた複合クラスがあり、ブーストにはいくつかの優れたオプションも用意されている必要があります。C ++で関数を記述し、それを「externC」と宣言します

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;
}
于 2010-05-14T15:39:22.273 に答える
0

C ++では、直接実行できます。

std::exp(std::complex<double>(0, -1));
于 2013-09-24T01:48:55.437 に答える