Cで虚数指数を計算する必要があります。
私の知る限り、Cには複素数ライブラリはありません。のを取得e^x
することは可能exp(x)
ですmath.h
が、どうすればの値を計算できe^(-i)
ますi = sqrt(-1)
か?
Cで虚数指数を計算する必要があります。
私の知る限り、Cには複素数ライブラリはありません。のを取得e^x
することは可能exp(x)
ですmath.h
が、どうすればの値を計算できe^(-i)
ますi = sqrt(-1)
か?
C99にはcomplex
タイプがあります。含めるcomplex.h
; -lm
gccでリンクする必要があるかもしれません。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
してください。
複素数の指数は次の値に等しいことに注意してください。
e^(ix) = cos(x)+i*sin(x)
それで:
e^(-i) = cos(-1)+i*sin(-1)
オイラーの公式を使用すると、それがあります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 ++で関数を記述し、それを「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;
}
C ++では、直接実行できます。
std::exp(std::complex<double>(0, -1));