В Haskell, в чем разница между Int
и Integer
? Где ответ задокументирован?
169
«Integer» - это произвольный тип точности: он будет содержать любое число, независимо от его размера, до предела памяти вашей машины…. Это означает, что у вас никогда не бывает арифметических переполнений. С другой стороны, это также означает, что ваша арифметика относительно медленная. Пользователи Lisp могут узнать тип "bignum" здесь.
«Int» - более распространенное 32- или 64-разрядное целое число. Реализации различаются, хотя гарантированно должно быть не менее 30 бит.
Источник: The Haskell Wikibook . Кроме того, вам может пригодиться раздел « Числа » в «Нежном введении в Haskell» .
Integer
часто быстрее, чем естьInt64
он плохо реализован на 32-битных системах. На 64-битных системах это здорово.Int
естьBounded
, что означает, что вы можете использоватьminBound
иmaxBound
выяснить пределы, которые зависят от реализации, но гарантированно будут содержать не менее [-2 29 .. 2 29 -1]Например:
Впрочем,
Integer
это произвольная точность и нетBounded
.источник
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
источник
Int - это C int, что означает, что его значения находятся в диапазоне от -2147483647 до 2147483647, в то время как диапазон целых чисел из всего множества Z означает, что он может быть сколь угодно большим.
Обратите внимание на значение литерала Int.
источник
...
из отчета на Haskell: http://www.haskell.org/onlinereport/basic.html#numbers
источник
An
Integer
реализуется как,Int#
пока не станет больше, чем максимальное значение, котороеInt#
может хранить. На данный момент это номер GMP .источник
Integer
и, следовательноInteger
, всегда лучший вариант?