2013-02-26 17 views
6
*Test> ((3^40) `mod` 3) :: Int 
2 
*Test> ((3^40) `mod` 3) 
0 

Neden böyle? GHCi 7.0.3 kullanıyorum. Bu bir hata değilse, Integral/Int'in haskell'de nasıl çalıştığına dair bir açıklama ya da bir açıklamanın bağlantısı.Birisi bu Integer modüler davranışını Haskell'de bana açıklayabilir mi?

Teşekkürler. Sadece aralık bitti

+1

Birincisi bir tamsayı taşmasıdır, ikinci sonuç beklendiği gibidır, çünkü "Tamsayı" kullanıldığında, bir rasgele kesinlikli tamsayı türü. –

cevap

13

, 3^40 64-bit int bile uyum bir dizi çok büyük: Öte yandan Integer tip sınırsız ve tüm numaralar kabul

Prelude> 3^40 :: Int 
-6289078614652622815 
Prelude> 3^40 :: Integer 
12157665459056928801 

hayır ne kadar büyük olursa olsun. İkinci durumunuzda ( 0 sonucunuz var) bir tür Integer çıktınız. Sadece modüler aritmetik bağlamında üs kullanma konusunda size arithmoi pakette powerMod fonksiyonuna bir göz varsa

+0

Belirleme kuralları tekrar grev! – MathematicalOrchid

İlgili konular