Answers:
“整数”是一个任意精度类型:无论大小,它都可以容纳任意数字,最大可达机器内存的大小……。这意味着您永远不会发生算术溢出。另一方面,这也意味着您的算术相对较慢。Lisp用户可以在此处识别“ bignum”类型。
“ Int”是更常见的32或64位整数。尽管可以保证至少为30位,但实现方式有所不同。
来源:Haskell Wikibook。另外,您可能会发现《Haskell入门》中的“数字”部分很有用。
Int64
在32位系统上实现得很差。在64位系统上,它很棒。
Int
是Bounded
,这意味着您可以使用minBound
并maxBound
找出限制,这些限制与实现有关,但保证至少保持[-2 29 .. 2 29 -1]。
例如:
Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)
但是,Integer
是任意精度,而不是Bounded
。
Prelude> (minBound, maxBound) :: (Integer, Integer)
<interactive>:3:2:
No instance for (Bounded Integer) arising from a use of `minBound'
Possible fix: add an instance declaration for (Bounded Integer)
In the expression: minBound
In the expression: (minBound, maxBound) :: (Integer, Integer)
In an equation for `it':
it = (minBound, maxBound) :: (Integer, Integer)
Int是机器整数的类型,保证的范围至少为-2 29到2 29-1,而Integer是任意精度的整数,范围与您的内存一样大。
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
Int是C int,这意味着其值的范围是-2147483647至2147483647,而Integer范围是整个Z集的范围,这意味着它可以任意大。
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
注意Int文字的值。
前奏仅定义最基本的数字类型:固定大小的整数(Int),任意精度的整数(Integer),...
...
有限精度整数类型Int至少覆盖[-2 ^ 29,2 ^ 29-1]范围。
摘自Haskell报告:http : //www.haskell.org/onlinereport/basic.html#numbers
Integer
速度通常比速度更快