195 votes

Quelle est la différence entre Int et Integer ?

En Haskell, quelle est la différence entre un Int et un Integer ? Où la réponse est-elle documentée ?

209voto

bcat Points 5033

"Integer" est une précision arbitraire précision arbitraire : il peut contenir n'importe quel n'importe quel nombre, jusqu'à la limite de la de la mémoire de votre machine . Cela signifie que vous n'aurez jamais débordements arithmétiques. D'autre part d'autre part, cela signifie également que votre arithmétique est relativement lente. Les utilisateurs de Lisp peuvent reconnaître le type "bignum" ici.

"Int" est le plus courant des nombres entiers de 32 ou 64 bits. ou 64 bits. Les implémentations varient, bien qu'il soit gua au moins 30 bits.

Fuente: Le Wikibook Haskell . Vous pouvez également trouver le Chiffres section de Une introduction en douceur à Haskell utiles.

0 votes

Selon le cette réponse , en utilisant Integer est souvent plus rapide que le

7 votes

@Maarten, c'est seulement parce que Int64 est assez mal implémenté sur les systèmes 32 bits. Sur les systèmes 64 bits, elle est excellente.

27voto

200_success Points 963

Int es Bounded ce qui signifie que vous pouvez utiliser minBound y maxBound pour trouver les limites, qui dépendent de l'implémentation mais qui sont garanties au moins [-2 29 .. 2 29 -1].

Par exemple :

Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)

Cependant, Integer est une précision arbitraire, et 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)

22voto

NullUserException Points 42268

Int est le type de machine avec une plage garantie d'au moins -2 29 à 2 29 - 1, tandis que Entier est une précision arbitraire aussi grande que la mémoire dont vous disposez.

https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html

11voto

SHiNKiROU Points 6052

Int est le C int, ce qui signifie que ses valeurs sont comprises entre -2147483647 et 2147483647, tandis qu'un Integer s'étend de l'entier Z c'est-à-dire qu'il peut être arbitrairement grand.

$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)

Remarquez la valeur du littéral Int.

2 votes

GHCi, version 7.10.3 donne un avertissement : Le littéral 12345678901234567890 est en dehors de l'intervalle Int -9223372036854775808..9223372036854775807.

5voto

newacct Points 42530

Le prélude définit uniquement les plus basiques : entiers de taille fixe (Int) entiers de taille fixe (Int), entiers de précision arbitraire (Integer), ... précision arbitraire (Integer), ...

...

L'inte couvre au moins l'intervalle [ - 2^29, 2^29 - 1].

du rapport Haskell : http://www.haskell.org/onlinereport/basic.html#numbers

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X