Antworten:
"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.
Int64
auf 32-Bit-Systemen eher schlecht implementiert ist. Auf 64-Bit-Systemen ist es großartig.
Int
ist Bounded
, was bedeutet , dass Sie verwenden können minBound
und maxBound
die Grenzen , um herauszufinden, was die Implementierung abhängig ist , aber zumindest zu halten , garantiert [-2 29 .. 2 29 -1].
Beispielsweise:
Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)
Ist Integer
jedoch willkürliche Genauigkeit und nichtBounded
.
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 ist der Typ von Maschinen-Ganzzahlen mit einem garantierten Bereich von mindestens -2 29 bis 2 29 - 1, während Integer Ganzzahlen mit beliebiger Genauigkeit sind und einen Bereich haben, für den Sie Speicher haben.
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
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.
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
Beachten Sie den Wert des Int-Literals.
Das Prelude definiert nur die grundlegendsten numerischen Typen: Ganzzahlen mit fester Größe (Int), Ganzzahlen mit beliebiger Genauigkeit (Integer), ...
...
Der ganzzahlige Typ Int mit endlicher Genauigkeit deckt mindestens den Bereich [- 2 ^ 29, 2 ^ 29 - 1] ab.
aus dem Haskell-Bericht: http://www.haskell.org/onlinereport/basic.html#numbers
An Integer
wird als implementiert, Int#
bis es größer wird als der Maximalwert, den ein Int#
Speicher speichern kann. Zu diesem Zeitpunkt ist es eine GMP- Nummer.
Integer
besteht und daher Integer
immer die bessere Option ist?
Integer
oft schneller als