Em Haskell, qual é a diferença entre an Int
e an Integer
? Onde está documentada a resposta?
169
"Inteiro" é um tipo de precisão arbitrária: manterá qualquer número, não importa o tamanho, até o limite da memória da sua máquina…. Isso significa que você nunca tem estouros aritméticos. Por outro lado, também significa que sua aritmética é relativamente lenta. Os usuários do Lisp podem reconhecer o tipo "bignum" aqui.
"Int" é o número inteiro mais comum de 32 ou 64 bits. As implementações variam, embora seja garantido pelo menos 30 bits.
Fonte: O Wikilivro Haskell . Além disso, você pode achar útil a seção Números de Uma introdução suave a Haskell .
Integer
muitas vezes é mais rápido do que éInt64
é implementado bastante mal em sistemas de 32 bits. Em sistemas de 64 bits, é ótimo.Int
éBounded
, o que significa que você pode usarminBound
emaxBound
descobrir os limites, que dependem da implementação, mas garantem manter pelo menos [-2 29 .. 2 29 -1].Por exemplo:
No entanto,
Integer
é precisão arbitrária, e nãoBounded
.fonte
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
fonte
Int é C int, o que significa que seus valores variam de -2147483647 a 2147483647, enquanto um intervalo inteiro de todo o conjunto Z , ou seja, pode ser arbitrariamente grande.
Observe o valor do literal Int.
fonte
...
do relatório Haskell: http://www.haskell.org/onlinereport/basic.html#numbers
fonte
Um
Integer
é implementado como umInt#
até ficar maior que o valor máximo que umInt#
pode armazenar. Nesse ponto, é um número GMP .fonte
Integer
e, portanto,Integer
sempre é a melhor opção?