Yanıtlar:
"Tamsayı" isteğe bağlı hassas bir türdür: ne kadar büyük olursa olsun, makinenizin belleğinin sınırına kadar herhangi bir sayı tutacaktır. Bu, asla aritmetik taşmaların olmadığı anlamına gelir. Öte yandan aritmetiğinizin nispeten yavaş olduğu anlamına gelir. Lisp kullanıcıları burada "bignum" türünü tanıyabilir.
"Int" daha yaygın olan 32 veya 64 bit tam sayıdır. En az 30 bit olması garanti edilse de uygulamalar değişiklik gösterir.
Kaynak: Haskell Wikibook . Ayrıca, Haskell'e Nazik Giriş'in Sayılar bölümünü faydalı bulabilirsiniz.
Int64
32-bit sistemlerde oldukça kötü bir şekilde uygulanmış olmasıdır. 64 bit sistemlerde harika.
Int
diğer bir deyişle Bounded
, uygulamaya bağlı olan, ancak en azından tutması garanti edilen sınırları kullanabileceğiniz minBound
ve maxBound
bulabileceğiniz anlamına gelir [-2 29 .. 2 29 -1].
Örneğin:
Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)
Ancak, Integer
keyfi bir kesinliktir, değil 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 , en az -2 29 ila 2 29 - 1 garantili menzile sahip makine tamsayılarıdır, tamsayı ise belleğiniz kadar geniş bir aralıkla keyfi hassasiyet tamsayılarıdır.
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
Int, C int'dir; bu, değerlerinin -2147483647 ile 2147483647 arasında değiştiği anlamına gelirken, tüm Z setinden bir Tamsayı aralığı , yani keyfi olarak büyük olabilir.
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
Int değişmezinin değerine dikkat edin.
Prelude sadece en temel sayısal türleri tanımlar: sabit boyutlu tamsayılar (Int), keyfi hassas tamsayılar (Tamsayı), ...
...
Sonlu duyarlıklı tamsayı tip Int en azından [- 2 ^ 29, 2 ^ 29 - 1] aralığını kapsar.
Haskell raporundan: http://www.haskell.org/onlinereport/basic.html#numbers
An Integer
, Int#
bir Int#
kutunun saklayabileceği maksimum değerden daha büyük olana kadar uygulanır . Bu noktada, bu bir GMP numarasıdır.
Integer
ve bu nedenle Integer
her zaman daha iyi bir seçenek olduğu anlamına mı geliyor?
Integer
kullanım genellikle olduğundan daha hızlı