Quelle est la différence entre Int et Integer?
En Haskell, quelle est la différence entre un Int
et Integer
? Où est la réponse documentée?
6 réponses
"Entier" est une précision arbitraire type: il tiendra n'importe quel nombre aucun importe comment grand, jusqu'à la limite de votre mémoire de l'ordinateur.... Cela signifie que vous n'aurez jamais débordements arithmétiques. Sur l'autre main cela signifie également que votre arithmétique est relativement lente. Les utilisateurs Lisp peuvent reconnaissez le type" bignum " ici.
" Int " est le bit 32 ou 64 le plus commun entier. Les implémentations varient, bien qu'il soit toujours au rendez-vous moins 30 bits.
Source: Le Haskell Wikibook . En outre, vous pouvez trouver la sectionNumbers deUne Introduction douce à Haskell utile.
Int est le type d'entiers de machine, avec la gamme garantie au moins -229 pour 229 - 1, alors que Integer est une précision arbitraire entiers, avec gamme aussi grande que vous avez de la mémoire pour.
Https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
Int
est Bounded
, ce qui signifie que vous pouvez utiliser minBound
et maxBound
pour trouver les limites, qui sont dépendant de l'implémentation, mais garanti pour contenir au moins [-229 .. 229-1].
Par exemple:
Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)
Toutefois, Integer
est une précision arbitraire, et non pas 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 est le C int, ce qui signifie que ses valeurs vont de -2147483647 à 2147483647, alors qu'une plage entière de l'ensemble Z, cela signifie qu'il peut être arbitrairement grand.
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
Notez la valeur du littéral Int.
Le Prélude ne définit que le plus types numériques de base: taille fixe entiers (Int), précision arbitraire les entiers (Integer)...
...
Le type entier de précision finie Int couvre au moins la plage [- 2 ^ 29, 2^29 - 1].
Extrait du rapport Haskell: http://www.haskell.org/onlinereport/basic.html#numbers
Un {[0] } est implémenté en tant que Int#
jusqu'à ce qu'il soit supérieur à la valeur maximale qu'un Int#
peut stocker. À ce stade, c'est un numéro GMP.