通常フーリエ変換には変換後の関数に
exp(iωt) where i is imaginary number.
がかかるので、虚数がでてきてしまいます。
通常のC言語(ANSI-C)では複素数型が無いので自分で定義しないといけません。
複素数型がある言語を探していたら、Fortran90はもちろん使えるのですが、ここは敢えて他の言語で組む事にしました。
C++のstd::complexクラスでは のように複素数型が使えますが如何せん見にくい・・。
何が嬉しくてこんな複雑なコードを(以下自主規制
となってしまったのでC99を使う事にしました。
以下コード(gcc Ver.4.2以降&Intel C++ Compiler Ver.11.1でコンパイル確認済み。VC++のコンパイラは未対応):
#include
//複素数型を扱うためにインクルード
#include
int main (int argc, const char * argv[]) {
double complex a;
double complex b;
double complex c;
a=3.0+1.0*I;
b=0.0+5.0*I;
c=a+b;
//複素数型を実数部と虚数部で分けて出力
//この出力法が分からず2時間くらい悩んだ
printf("%f + %fi\n",creal(c),cimag(c));
return 0;
}
C99の情報が少なくて手間取ってしまいました。
特に複素数型の出力方法が殆ど検索に引っかからなかったのが痛かったですね。
ではこの辺で。