Was ist in Haskell der Unterschied zwischen einem Int
und einem Integer
? Wo ist die Antwort dokumentiert?
169
"Integer" ist ein Typ mit beliebiger Genauigkeit: Er enthält eine beliebige Zahl, egal wie groß sie ist, bis zur Speichergrenze Ihres Computers. Dies bedeutet, dass Sie niemals arithmetische Überläufe haben. Andererseits bedeutet dies auch, dass Ihre Arithmetik relativ langsam ist. Lisp-Benutzer können hier den Typ "Bignum" erkennen.
"Int" ist die häufigere 32- oder 64-Bit-Ganzzahl. Die Implementierungen variieren, obwohl garantiert mindestens 30 Bit vorhanden sind.
Quelle: Das Haskell Wikibook . Möglicherweise finden Sie auch den Abschnitt Zahlen in Eine sanfte Einführung in Haskell hilfreich.
Integer
oft schneller alsInt64
auf 32-Bit-Systemen eher schlecht implementiert ist. Auf 64-Bit-Systemen ist es großartig.Int
istBounded
, was bedeutet , dass Sie verwenden könnenminBound
undmaxBound
die Grenzen , um herauszufinden, was die Implementierung abhängig ist , aber zumindest zu halten , garantiert [-2 29 .. 2 29 -1].Beispielsweise:
Ist
Integer
jedoch willkürliche Genauigkeit und nichtBounded
.quelle
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
quelle
Int ist das C int, was bedeutet, dass seine Werte von -2147483647 bis 2147483647 reichen, während ein Integer-Bereich von der gesamten Z- Menge, das heißt, er kann beliebig groß sein.
Beachten Sie den Wert des Int-Literals.
quelle
...
aus dem Haskell-Bericht: http://www.haskell.org/onlinereport/basic.html#numbers
quelle
An
Integer
wird als implementiert,Int#
bis es größer wird als der Maximalwert, den einInt#
Speicher speichern kann. Zu diesem Zeitpunkt ist es eine GMP- Nummer.quelle
Integer
besteht und daherInteger
immer die bessere Option ist?