irbで3 ** 557を計算しようとしたときにこの問題に遭遇しました。 RubyとMacRubyはどちらもMac(OS X 10.8)にインストールされています。また、ルビのバージョンはMacRuby 0.12(ルビ1.9.2)の1.8.7です。 ribとmacirbは3 ** 557の計算で2つの異なる答えをくれました。 (macirb'sは正しいです。)Rubyの指数関数1.8.7が間違った答えを返す
$ irb
>> 3**557
=> 54755702179342762063551440788945541007926808765326951193810107165429610423703291760740244724326099993131913104272587572918520442872536889724676586931200965615875242243330408150984753872526006744122187638040962508934109837755428764447134683114539218909666971979603
$ macirb
irb(main):001:0> 3**557
=> 57087217942658063217290581978966727348872586279944803346410228520919738045995056049600505293676159316424182057188730248707922985741467061108015301244570536546607487919981026877250949414156613856336341922395385463291076789878575326
そして、私はもっと大きなものを試しました。 3 ** 5337、私は今回も同じ答えを得ました。
これはRuby 1.8.7のバグですか、それとも指数を計算する別の方法ですか?
ていますが、[べき乗剰余演算]を見てみたいことがあり(http://en.wikipedia.org/wiki/Modular_exponentiation)を実行します。 – jli
私は1.9.3より前のMRIをインストールしていませんが、正しい結果が得られます。 –
どのMacの正確なモデルをお使いですか? MacPro(Xeon)で同じバージョンのRuby(1.8.7 p358)でこれを再現することはできません。 32ビットで動作している古い1.8.6では動かすこともできません。 –