Int
Haskell では、 anと anの違いは何Integer
ですか? 回答はどこに文書化されていますか?
6 に答える
「整数」は任意の精度の型です。マシンのメモリの限界まで、どんなに大きな数値でも保持できます。これは、算術オーバーフローが発生しないことを意味します。一方で、それはあなたの計算が比較的遅いことも意味します。Lisp ユーザーは、ここで "bignum" 型に気付くかもしれません。
"Int" は、より一般的な 32 または 64 ビットの整数です。実装はさまざまですが、少なくとも 30 ビットであることが保証されています。
出典: Haskell ウィキブック. また、Haskell の入門書の数値セクションが役立つ場合もあります。
Int
これは、 と を使用して制限を見つける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 の範囲が保証されていますが、 Integerは任意精度の整数であり、範囲はメモリの容量と同じです。
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
Int は C の int です。これは、その値が -2147483647 から 2147483647 までの範囲であることを意味しますが、Zセット全体からの整数の範囲であることを意味します。つまり、任意に大きくすることができます。
$ 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