C99を弄る機会があったので。

アバター
コスモ
記事: 3
登録日時: 14年前
連絡を取る:

C99を弄る機会があったので。

投稿記事 by コスモ » 14年前

と言うのも、最近必要になってフーリエ変換のプログラムを書いた訳です。いや、Excelでも出来るんですが、2^nの個数にしないと計算してくれないんですもの。
通常フーリエ変換には変換後の関数に
 exp(iωt) where i is imaginary number.
がかかるので、虚数がでてきてしまいます。
通常のC言語(ANSI-C)では複素数型が無いので自分で定義しないといけません。

複素数型がある言語を探していたら、Fortran90はもちろん使えるのですが、ここは敢えて他の言語で組む事にしました

C++のstd::complexクラスでは

CODE:

complexa(3,5) //a=3+5i
のように複素数型が使えますが如何せん見にくい・・。
何が嬉しくてこんな複雑なコードを(以下自主規制

となってしまったのでC99を使う事にしました。

以下コード(gcc Ver.4.2以降&Intel C++ Compiler Ver.11.1でコンパイル確認済み。VC++のコンパイラは未対応):

CODE:

#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の情報が少なくて手間取ってしまいました。
特に複素数型の出力方法が殆ど検索に引っかからなかったのが痛かったですね。
ではこの辺で。
最後に編集したユーザー コスモ on 2010年11月05日(金) 19:59 [ 編集 1 回目 ]

コメントはまだありません。