回答:
「整数」は任意の精度の型です。マシンのメモリの制限まで、どんなに大きな数でも保持できます。つまり、算術オーバーフローが発生することはありません。一方、それはまたあなたの計算が比較的遅いことを意味します。Lispユーザーは、ここで「bignum」タイプを認識できます。
「Int」は、より一般的な32ビットまたは64ビットの整数です。実装はさまざまですが、少なくとも30ビットであることが保証されています。
出典:HaskellのWikibook。また、Haskellの穏やかな紹介の数字のセクションが役立つ場合もあります。
Int64
は32ビットシステムでかなりひどく実装されているからです。64ビットシステムでは、これはすばらしいことです。
Int
isですBounded
。つまり、実装に依存しますが、少なくとも[-2 29 .. 2 29 -1] を保持することが保証されている制限を使用minBound
しmaxBound
て見つけることができます。
例えば:
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ながら整数あなたのためのメモリを有するので、大きなとして範囲で任意の精度の整数です。
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
IntはCのintです。つまり、その値の範囲は-2147483647〜2147483647ですが、Zセット全体のIntegerの範囲は、任意に大きくすることができます。
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
Intリテラルの値に注意してください。
Preludeは、最も基本的な数値型のみを定義します。固定サイズの整数(Int)、任意精度の整数(Integer)、...
...
有限精度整数型Intは、少なくとも[-2 ^ 29、2 ^ 29-1]の範囲をカバーします。
Haskellレポートから:http : //www.haskell.org/onlinereport/basic.html#numbers
Integer
実装されInt#
、それが最大値よりも大きくなるまで、Int#
格納することができます。その時点で、それはGMP番号です。
Integer
のでInteger
、常により良いオプションですか?
Integer
は通常よりも速い