Life Goes On

まあまあだけど楽しんでる方です

Haskell の乗算は FFT らしい

Haskell の乗算は高速フーリエ変換を使ってると聞きました。
軽く確かめてみたら、だいたい O(n * log n) なので、多分そうなんだと思います。
でも、それを明示したドキュメントを見つけられず‥。
それにしても、よく作りこまれてるなぁ。

Prelude> signum $ (2^1000000) * (2^1000000)
1
(0.41 secs, 2093928 bytes)
Prelude> signum $ (2^2000000) * (2^2000000)
1
(0.90 secs, 2156652 bytes)
Prelude> signum $ (2^4000000) * (2^4000000)
1
(2.01 secs, 2094116 bytes)
Prelude> signum $ (2^8000000) * (2^8000000)
1
(4.59 secs, 2094844 bytes)
Prelude> 0.41 / (1000000 * log 1000000)
2.9676789596722208e-8
Prelude> 0.90 / (2000000 * log 2000000)
3.1015963579121054e-8
Prelude> 2.01 / (4000000 * log 4000000)
3.30552853871429e-8
Prelude> 4.59 / (8000000 * log 8000000)
3.609636546264561e-8