🍣

[[Bug #21814] 0.pow(2,-9999999999999999990) で意図しない値が返ってくるバグ報告

に公開

[Bug #21814] 0.pow(2,-9999999999999999990) should be zero

  • 0.pow(2,-9999999999999999990)0 を返す必要があるが意図しない値が返ってくるというバグ報告
    • 珍しく matz が建てたバグチケット
  • Integer#pow は第二引数がある場合は self.pow(other, modulo) の場合は self.pow(other) / modulo と同等の結果になる
  • なので提示さている計算では 0.pow(2) / -9999999999999999990 == 0 / -9999999999999999990 == 0 となる
  • しかし、実際には -9999999999999999990 か返ってきてしまうというバグ
p 0.pow(2,-9999999999999999990)
# => -9999999999999999990

p 0.pow(2) / -9999999999999999990
# => 0
  • このバグは開発版の Ruby 4.0-dev で修正済み
GitHubで編集を提案

Discussion