190

IntHaskell では、 anと anの違いは何Integerですか? 回答はどこに文書化されていますか?

4

6 に答える 6

207

「整数」は任意の精度の型です。マシンのメモリの限界まで、どんなに大きな数値でも保持できます。これは、算術オーバーフローが発生しないことを意味します。一方で、それはあなたの計算が比較的遅いことも意味します。Lisp ユーザーは、ここで "bignum" 型に気付くかもしれません。

"Int" は、より一般的な 32 または 64 ビットの整数です。実装はさまざまですが、少なくとも 30 ビットであることが保証されています。

出典: Haskell ウィキブック. また、Haskell の入門書の数値セクションが役立つ場合もあります。

于 2010-08-07T05:59:35.500 に答える
27

Intこれは、 と を使用して制限を見つけるBoundedことができることを意味します。制限は実装に依存しますが、少なくとも [-2 29 .. 2 29 -1] を保持することが保証されています。minBoundmaxBound

例えば:

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)
于 2014-05-16T21:28:48.347 に答える
22

Intは機械整数の型で、少なくとも -2 29から 2 29 - 1 の範囲が保証されていますが、 Integerは任意精度の整数であり、範囲はメモリの容量と同じです。

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

于 2010-08-07T05:59:11.863 に答える
11

Int は C の int です。これは、その値が -2147483647 から 2147483647 までの範囲であることを意味しますが、Zセット全体からの整数の範囲であることを意味します。つまり、任意に大きくすることができます。

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

Int リテラルの値に注意してください。

于 2010-08-07T06:00:01.630 に答える
5

Prelude では、固定サイズの整数 (Int)、任意精度の整数 (Integer) など、最も基本的な数値型のみを定義しています。

...

有限精度の整数型 Int は、少なくとも [ - 2^29, 2^29 - 1] の範囲をカバーします。

Haskell レポートから: http://www.haskell.org/onlinereport/basic.html#numbers

于 2010-08-07T06:49:00.330 に答える