En Haskell, ¿cuál es la diferencia entre an Int
y an Integer
? ¿Dónde se documenta la respuesta?
169
"Integer" es un tipo de precisión arbitraria: contendrá cualquier número, sin importar cuán grande sea, hasta el límite de la memoria de su máquina ... Esto significa que nunca tiene desbordamientos aritméticos. Por otro lado, también significa que su aritmética es relativamente lenta. Los usuarios de Lisp pueden reconocer el tipo "bignum" aquí.
"Int" es el número entero de 32 o 64 bits más común. Las implementaciones varían, aunque se garantiza que sea de al menos 30 bits.
Fuente: The Haskell Wikibook . Además, puede encontrar útil la sección Números de Una Introducción Suave a Haskell .
Integer
es a menudo más rápido de lo que esInt64
se implementa bastante mal en los sistemas de 32 bits. En sistemas de 64 bits, es genial.Int
esBounded
decir, puede usarminBound
ymaxBound
para averiguar los límites, que dependen de la implementación pero que tienen una garantía de al menos [-2 29 .. 2 29 -1].Por ejemplo:
Sin embargo,
Integer
es precisión arbitraria, y noBounded
.fuente
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
fuente
Int es el C int, lo que significa que sus valores oscilan entre -2147483647 y 2147483647, mientras que un rango entero de todo el conjunto Z , eso significa que puede ser arbitrariamente grande.
Observe el valor del literal Int.
fuente
...
del informe Haskell: http://www.haskell.org/onlinereport/basic.html#numbers
fuente
Un
Integer
se implementa comoInt#
hasta que se hace más grande que el valor máximo queInt#
puede almacenar una lata. En ese punto, es un número GMP .fuente
Integer
y, porInteger
lo tanto, siempre es la mejor opción?