Dans Haskell, quelle est la différence entre un Int
et un Integer
? Où la réponse est-elle documentée?
169
"Integer" est un type de précision arbitraire: il contiendra n'importe quel nombre, quelle que soit sa taille, jusqu'à la limite de la mémoire de votre machine…. Cela signifie que vous n'avez jamais de débordements arithmétiques. D'un autre côté, cela signifie également que votre arithmétique est relativement lente. Les utilisateurs de Lisp peuvent reconnaître le type "bignum" ici.
"Int" est l'entier 32 ou 64 bits le plus courant. Les implémentations varient, même si elle est garantie d'au moins 30 bits.
Source: Le Wikibook Haskell . De plus, vous trouverez peut-être utile la section Numbers de A Gentle Introduction to Haskell .
Integer
est souvent plus rapide qu'elle ne l'estInt64
est assez mal implémenté sur les systèmes 32 bits. Sur les systèmes 64 bits, c'est génial.Int
isBounded
, ce qui signifie que vous pouvez utiliserminBound
etmaxBound
connaître les limites, qui dépendent de l'implémentation mais qui sont garanties au moins [-2 29 .. 2 29 -1].Par exemple:
Cependant,
Integer
c'est une précision arbitraire, et nonBounded
.la source
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
la source
Int est le C int, ce qui signifie que ses valeurs vont de -2147483647 à 2147483647, tandis qu'une plage entière de l'ensemble Z complet , cela signifie qu'elle peut être arbitrairement grande.
Notez la valeur du littéral Int.
la source
...
extrait du rapport Haskell: http://www.haskell.org/onlinereport/basic.html#numbers
la source
An
Integer
est implémenté comme unInt#
jusqu'à ce qu'il devienne plus grand que la valeur maximale qu'unInt#
peut stocker. À ce stade, c'est un numéro GMP .la source
Integer
, et que c'est doncInteger
toujours la meilleure option?