Int ve Integer arasındaki fark nedir?


Yanıtlar:


184

"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.


Bu cevaba göre , Integerkullanım genellikle olduğundan daha hızlı
Maarten

6
@Maarten, bunun nedeni sadece Int6432-bit sistemlerde oldukça kötü bir şekilde uygulanmış olmasıdır. 64 bit sistemlerde harika.
dfeuer

22

Intdiğer bir deyişle Bounded, uygulamaya bağlı olan, ancak en azından tutması garanti edilen sınırları kullanabileceğiniz minBoundve maxBoundbulabileceğiniz anlamına gelir [-2 29 .. 2 29 -1].

Örneğin:

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

Ancak, Integerkeyfi 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)


10

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.


2
GHCi, sürüm 7.10.3 uyarı verir: Değişmez 12345678901234567890 Int aralığının dışında -9223372036854775808..9223372036854775807
Adam


4

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.


2
Bu uygulamaya özel geliyor. Tamsayı'nın bu şekilde uygulanması gerektiğini söyleyen bir referans var mı?
yoniLavi

4
Hayır, haklısın, bu GHC'ye özgü. Bununla birlikte, 1. GHC çoğu insanın kullandığı şeydir, 2. Böyle bir veri türünü uygulamayı düşünebildiğim en akıllı yol budur.
Nate Symer

Bu (GHC'de) kullanmak için performans ödünleşmesinin olmadığı Integerve bu nedenle Integerher zaman daha iyi bir seçenek olduğu anlamına mı geliyor?
Kirk Broadhurst
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.