複素数クラス
いままで複素数を計算する際、CodeProjectで公開されていたKarlsTools.Complexクラス(C++で作成されたdll)を使用していたのですが
- Complex math library for C# and VB.NET
- http://www.codeproject.com/KB/dotnet/complex_math.aspx
プログラムに色々手を加えていたら、デバッグ時にLoaderLockエラーが発生するようになりました*1。具体的なエラー発生箇所が表示されず、原因がよくわからないため、別のクラスを使うことに。
上記ページのComment欄に、本気で使いたい場合はPureマネージコードの"Math.NET"を使うといいよ!的な作者のコメントがあったので、Math.NETにあるComplexクラスを検討してみた。
複素数クラスに限らず、数値計算ライブラリとして機能が充実していて良かったのだけれど、今まで使っていたのと使い勝手が微妙に違う&機能が足りない(ノルムとか絶対値が実装されてない)ので今回はヤメ。自分で実装すれば済む話ではあるんだけれど、更新が頻繁にされてることからして、将来本家が更新されるたびに書き直すのが目に見えて、面倒なので。
というわけで見つけてきたのが、
- WonderRabbitProject > FFT.NET
- http://wonderrabbitproject.net/?Software%2FFFT.NET
名前の通りFFTの計算クラスなのですが、複素数クラスが一緒に入ってるのでそこだけ使用。機能的にも使い勝手も、KarlsTools.Complexクラスに近かったので採用。ホントほとんど同じだったので、作ってたプログラム側のコード修正もほんの数行で終了。したのですが、このクラス若干足りない部分があったので
- 演算子のオーバーロードが足りなかった*2ので、とりあえず必要な分だけ書き足し
- プロパティ・メソッドの名前をMSのデザインガイドラインに沿うよう修正
だけ加えました。現状、dllファイルは使わずに、修正を加えたクラスファイルをプロジェクトに取り込んで使用してます。