FFT

誰かがOCamlでやったら楽そうだったから〜といってたので、OCamlで。てか、最近OCamlしか書いてない。きれいに、わかりやすくを心がけてみる。よく見れば、レジュメにはFFTに関して何もかかれてない。。。自分で調べろってことですか。ぉぅ。
わかりやすい解説は少ない。何となく、的はずれなようなサイトも見受けられる。

ここのアプレットをみるのが一番わかりやすい。てか、このアプレットとにらめっこしてるとすぐわかる。視覚化ってすばらしいね。うん。基本的にはたいしたことしてないんですね。キャッシュがどうこうっていう話が出てくるとなんかもっとややこしい。
素朴な実装でささっと。これ絶対遅いな。。。さすがに三角関数呼び出しまくりはまずいかなぁ。小さなサイズではちゃんと動くが、リストのサイズをでかくしていったらstack overflow。まじかよ。なるほど、OCamlのmap実装がtail recursiveじゃないからか。せっかくrev_mapとrevがあるのに、何してんでしょね。サイズが小さいときはtailじゃない方がコスト少ないのかな。てか、Arrayつかえってことですか。適当にArrayに置き換えたが、、、対して速度かわらんじゃん。意外とはやいな、List。あー、しかしListにしたらもっと大きなところでまた落ちた。非tail発見。修正。動いた。tail callって偉大ですね。速い遅いとかじゃなくて、動く動かないが変わってしまう。しかし、50万程度の長さのListで落ちてどうする! ん、ちょとまて、結構でかいな。ぶつぶつ。
そういや、なんかCPU実験のおかげでclosureや高階関数使うと遅くなるんじゃないかとか、faddよりfmulの方が軽いんじゃないかとか、よくわからん価値観が身に付いてしまった。rubyスクリプト書いてるときにletとか書き出したり、ファイル開くとき無条件で拡張子に.mlって書いてしまったり。。。後遺症。。。