Jaka jest różnica między an Int
i an w Haskell Integer
? Gdzie jest udokumentowana odpowiedź?
169
„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 .
Integer
jest często szybsze niż jestInt64
jest raczej źle zaimplementowany w systemach 32-bitowych. W systemach 64-bitowych jest świetny.Int
toBounded
, co oznacza, że można wykorzystaćminBound
imaxBound
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:
Jednak
Integer
jest arbitralna precyzja, a nieBounded
.źródło
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
źródło
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.
Zwróć uwagę na wartość literału Int.
źródło
...
z raportu Haskella: http://www.haskell.org/onlinereport/basic.html#numbers
źródło
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 .źródło
Integer
i dlategoInteger
zawsze jest lepszą opcją?