В чем разница между Int и Integer?
в Haskell, в чем разница между Int
и Integer
? Где задокументирован ответ?
6 ответов:
"Integer" - произвольная точность тип: он будет содержать любое число нет важно, насколько большой, до предела память вашей машины.... Это означает, что у вас никогда не было арифметическое переполнение. С другой рука это также означает, что ваша арифметика относительно медленный. Пользователи Lisp может распознайте здесь тип "bignum".
" Int " является более распространенным 32 или 64 бит целое число. Реализации различаются, хотя это гарантированно будет на не менее 30 биты.
источник: The Haskell Wikibook. Кроме того, вы можете найти цифры на нежное знакомство с Хаскеллом полезное.
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 набор, то есть, он может быть сколь угодно большим.
$ ghci Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int) (12345678901234567890,-350287150)
обратите внимание на значение литерала Int.
прелюдия определяет только самое основные числовые типы: фиксированный размер целые числа (Int), произвольная точность целые числа (Integer), ...
...
целочисленный тип конечной точности Int охватывает по крайней мере диапазон [- 2^29, 2^29 - 1].
из отчета Хаскелла:http://www.haskell.org/onlinereport/basic.html#numbers
An
Integer
реализуется какInt#
пока он не станет больше максимального значения anInt#
может хранить. В этот момент, это GMP количество.