HaskellのIntegerがどのへんでオーバーフローするか調べようとしたら、オーバーフローしなかったでござる
30分プログラム、その593。HaskellのIntegerがどのへんでオーバーフローするか調べてみよう。
HaskellのIntegerはメモリの許す限り任意の桁数が扱えるらしいです。いわゆる、BigNumとかBigIntとか呼ばれてるやつです。
とは言うものの、メモリがいっぱいになったらオーバーフローするだろ、と高を括って挑戦したら、全然オーバーフローしませんでした。やるな、Haskell。
使い方
-- Intはオーバーフローする *Main> overflow (2 :: Int) 1073741824 -- Integerはオーバーフローしない *Main> overflow (2 :: Integer)
ソースコード
overflow :: (Integral a) => a -> a overflow x = if x > f x then x else overflow $ f x where f x = 2 * x