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