質問

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

私の知る限り、C には複素数ライブラリはありません。入手可能です e^xexp(x)math.h, 、しかし、の値を計算するにはどうすればよいですか? e^(-i), 、 どこ i = sqrt(-1)?

役に立ちましたか?

解決

複素数の指数に等しい。なおます:

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

するとます:

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

他のヒント

はC99で、complexタイプがあります。 complex.hを含めます。あなたは、GCCに-lmとリンクする必要があるかもしれません。マイクロソフトの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 の詳細については。

の使用 オイラーの公式 あなたはそれを持っています e^-i == cos(1) - i*sin(1)

e^-jあなただけの本当の機能を使用して実部と虚部を生成することができますので、ちょうどcos(1) - j*sin(1)です。

ただ、デカルト形式を使用します。

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

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

は、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;
}

はC ++が直接行うことができる:STD :: EXP(STD ::錯体(0、-1));

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top