Risposte:
"Intero" è un tipo di precisione arbitraria: conterrà qualsiasi numero, non importa quanto sia grande, fino al limite della memoria della tua macchina…. Ciò significa che non si verificano mai overflow aritmetici. D'altra parte significa anche che l'aritmetica è relativamente lenta. Gli utenti Lisp possono riconoscere il tipo "bignum" qui.
"Int" è il numero intero più comune a 32 o 64 bit. Le implementazioni variano, sebbene sia garantito che siano almeno 30 bit.
Fonte: The Haskell Wikibook . Inoltre, potresti trovare utile la sezione Numbers di A Gentle Introduction to Haskell .
Int64
è implementato piuttosto male sui sistemi a 32 bit. Sui sistemi a 64 bit, è fantastico.
Int
è Bounded
, il che significa che è possibile utilizzare minBound
e maxBound
scoprire i limiti, che sono dipendenti dall'implementazione ma garantiti per contenere almeno [-2 29 .. 2 29 -1].
Per esempio:
Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)
Tuttavia, Integer
è precisione arbitraria e non 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 è il tipo di numeri interi macchina, con un intervallo garantito di almeno -2 29 a 2 29 - 1, mentre Numero intero è numeri interi di precisione arbitraria, con un intervallo di dimensioni sufficienti per la memoria.
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
Int è C int, il che significa che i suoi valori vanno da -2147483647 a 2147483647, mentre un intervallo Integer dall'intero set Z , ciò significa che può essere arbitrariamente grande.
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
Notare il valore di Int letterale.
Preludio definisce solo i tipi numerici più elementari: numeri interi di dimensioni fisse (Int), numeri interi di precisione arbitraria (Integer), ...
...
Il tipo intero di precisione finita Int copre almeno l'intervallo [- 2 ^ 29, 2 ^ 29 - 1].
dal rapporto Haskell: http://www.haskell.org/onlinereport/basic.html#numbers
Un Integer
viene implementato come un Int#
fino a quando non diventa più grande del valore massimo che è Int#
possibile memorizzare. A quel punto, è un numero GMP .
Integer
, e quindi Integer
è sempre l'opzione migliore?
Integer
è spesso più veloce di quanto non sia