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

これはなぜですか?私はGHCi 7.0.3を使用しています。これがバグではない場合、Integr/Intがhaskellでどのように動作するかの説明、またはexplainationへのリンクです。誰かがHaskellでこのIntegerモジュラ動作を私に説明することはできますか?

ありがとうございました。

+1

最初は整数オーバーフローで、 'Integer'が使用され、任意の精度の整数型であるため、2番目の結果は期待通りです。 –

答えて

13

あなたが範囲外単純だ、3^40も64ビットintに収まるように数の大きすぎる:

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

一方Integerタイプが無制限であるとなしすべての数字を受け入れますどのくらい大きな問題。あなたの2番目のケース(0の結果が得られた)では、タイプIntegerが推測されています。 、唯一のモジュラ算術のコンテキストで累乗を使用してのあなたはarithmoiパッケージでpowerMod機能を見ている場合

+0

デフォルトルールが再び破られます! – MathematicalOrchid

関連する問題