Відповіді:
"Цілий" - це довільний спосіб точності: він може містити будь-яке число, незалежно від величини, до межі пам'яті вашої машини…. Це означає, що ви ніколи не маєте арифметичних переливів. З іншого боку, це також означає, що ваша арифметика є відносно повільною. Тут користувачі Lisp можуть розпізнати тип "bignum".
"Int" - це більш поширене 32 або 64 бітове ціле число. Реалізація відрізняється, хоча гарантується щонайменше 30 біт.
Джерело: Вісник «Haskell» . Крім того , ви можете знайти Число розділ A Gentle Введення в Haskell корисного.
Int64
, що реалізовано досить погано в 32-бітних системах. У 64-бітних системах це чудово.
Int
є Bounded
, що означає, що ви можете використовувати minBound
та maxBound
з’ясувати межі, які залежать від впровадження, але гарантовано мають принаймні [-2 29 .. 2 29 -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 - це тип машинних цілих чисел, із гарантованим діапазоном принаймні від -2 29 до 2 29 - 1, тоді як Integer - цілі числа довільної точності, діапазон такий великий, як у вас є пам'ять.
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
Int - це C int, що означає його значення в діапазоні від -2147483647 до 2147483647, тоді як діапазон Integer від усього набору Z , це означає, що він може бути довільно великим.
$ 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
Реалізація Integer
реалізовується як до Int#
тих пір, поки вона не перевищить максимальне значення, яке Int#
може зберігати. У цей момент це номер GMP .
Integer
, і тому Integer
завжди кращий варіант?
Integer
часто швидше, ніж є