В чем разница между Int и Integer?

в Haskell, в чем разница между Int и Integer? Где задокументирован ответ?

6 ответов


"Integer" - произвольная точность тип: он будет содержать любое число нет важно, насколько большой, до предела память компьютера.... Это значит, что у тебя никогда не было арифметическое переполнение. С другой рука это также означает, что ваша арифметика относительно медленный. Пользователи Lisp может распознайте тип "bignum" здесь.

" Int " является более распространенным 32 или 64 бит целое число. Реализации различаются, хотя это гарантированно будет на не менее 30 биты.

источник: Haskell Wikibook. Кроме того, вы можете найти цифры на нежное введение в Haskell полезное.


Int - тип целых чисел машины, с гарантированным рядом по крайней мере -229 в 229 - 1, в то время как целое - это целые числа произвольной точности, с диапазон настолько большой,насколько у вас есть память.

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


Int и Bounded, что означает, что вы можете использовать minBound и maxBound чтобы узнать пределы, которые зависят от реализации, но гарантированно содержат по крайней мере [-229 .. 229-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 set, это означает, что он может быть сколь угодно большим.

$ 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


An Integer реализуется как Int# пока он не станет больше максимального значения an Int# может хранить. В этот момент, это GMP количество.