Odpowiedzi:
„Liczba całkowita” to typ o dowolnej precyzji: może pomieścić dowolną liczbę bez względu na wielkość, aż do limitu pamięci maszyny…. Oznacza to, że nigdy nie masz przepełnień arytmetycznych. Z drugiej strony oznacza to również, że twoja arytmetyka jest stosunkowo powolna. Użytkownicy Lispa mogą tutaj rozpoznać typ „bignum”.
„Int” to bardziej popularna 32- lub 64-bitowa liczba całkowita. Implementacje są różne, chociaż gwarantuje się co najmniej 30 bitów.
Źródło: The Haskell Wikibook . Przydatna może być również sekcja Liczby w Delikatnym wprowadzeniu do Haskella .
Int64
jest raczej źle zaimplementowany w systemach 32-bitowych. W systemach 64-bitowych jest świetny.
Int
to Bounded
, co oznacza, że można wykorzystać minBound
i maxBound
aby dowiedzieć się w granicach, które są zależne od implementacji, ale gwarantuje się co najmniej [-2 29 .. 2 29 1].
Na przykład:
Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)
Jednak Integer
jest arbitralna precyzja, a nie 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 to typ maszynowych liczb całkowitych z gwarantowanym zakresem od -2 29 do 2 29 - 1, podczas gdy Integer to liczby całkowite o dowolnej precyzji, z zakresem tak dużym, na jaki masz pamięć.
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
Int to C int, co oznacza, że jego wartości mieszczą się w zakresie od -2147483647 do 2147483647, podczas gdy zakres Integer z całego zbioru Z oznacza, że może być dowolnie duży.
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
Zwróć uwagę na wartość literału Int.
Prelude definiuje tylko najbardziej podstawowe typy liczbowe: liczby całkowite o stałej wielkości (Int), liczby całkowite o dowolnej precyzji (Integer), ...
...
Typ liczby całkowitej o skończonej precyzji Int obejmuje co najmniej zakres [- 2 ^ 29, 2 ^ 29 - 1].
z raportu Haskella: http://www.haskell.org/onlinereport/basic.html#numbers
An Integer
jest zaimplementowany jako wartość, Int#
dopóki nie będzie większa niż maksymalna wartość, jaką Int#
może przechowywać. W tym momencie jest to numer GMP .
Integer
i dlatego Integer
zawsze jest lepszą opcją?
Integer
jest często szybsze niż jest