Haskell Int和Integer

在Haskell中, IntInteger什么区别? 答案在哪里logging?

“Integer”是一个任意的精确types:它将保存任何数字,无论多大,直到机器内存的限制…。 这意味着你永远不会有算术溢出。 另一方面也意味着你的算术相对较慢。 Lisp用户可能会在这里识别“bignum”types。

“Int”是更常见的32或64位整数。 实现方式各不相同,但保证至less有30位。

来源: Haskell Wikibook 。 另外,你可能会发现Haskell一个简洁介绍中的Numbers部分很有用。

Int是机器整数的types,保证范围至less为-2 29至2 29 – 1,而Integer是任意精度整数,范围与内存一样大。

https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html

IntBounded ,这意味着你可以使用minBoundmaxBound找出限制,这些限制是依赖于实现的,但是保证至less保持[-2 maxBound -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是C int,意思是它的取值范围从-2147483647到2147483647,而整个Z取整数范围,也就是说,它可以是任意大的。

 $ ghci Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int) (12345678901234567890,-350287150) 

注意Int文字的值。

Prelude只定义了最基本的数字types:固定大小整数(Int),任意精度整数(Integer),…

有限精度整型Int至less覆盖范围[ – 2 ^ 29,2 ^ 29 – 1]。

从Haskell报告: http : //www.haskell.org/onlinereport/basic.html#numbers

一个Integer被实现为一个Int#直到它大于Int#可以存储的最大值。 那时,这是一个GMP号码。