Gra*_*ant 1 int haskell numbers
具有以下功能:
factorial :: Int -> Int
factorial n = product [1..n]
参数小于21时返回正确的值.例如:
factorial 20返回2432902008176640000,但factorial 21返回-4249290049419214848即使值不为负,也不正确.
我知道应该使用这些大小的数字Integer,但具体是这里发生的错误,为什么?
Int在Haskell中是具有有限范围的整数的固定精度表示.与大多数固定精度整数表示的情况一样,将创建一个太大或太小而无法表示的整数的算术运算(如Mephy所述,称为整数溢出)将通过截断它来包装其结果到它最不重要的位.例如:
?> maxBound + 1 :: Int
-9223372036854775808
?> (maxBound + 1 :: Int) == minBound
True
Run Code Online (Sandbox Code Playgroud)