From: "mrkn (Kenta Murata)" Date: 2013-11-29T15:19:42+09:00 Subject: [ruby-dev:47826] [ruby-trunk - Bug #8401][Closed] BigDecimal.new("2").power(1e20) is zero. Issue #8401 has been updated by mrkn (Kenta Murata). Status changed from Open to Closed It is corrected in 1.2.3. $ ruby -ve 'gem "bigdecimal", "1.2.3"; require "bigdecimal"; puts BigDecimal(2).power(1e20)' ruby 1.9.3p484 (2013-11-22) [x86_64-darwin12.5.0] Infinity $ ruby -ve 'gem "bigdecimal", "1.2.3"; require "bigdecimal"; puts BigDecimal(2).power(1e20)' ruby 2.0.0p353 (2013-11-22) [x86_64-darwin12.5.0] Infinity ---------------------------------------- Bug #8401: BigDecimal.new("2").power(1e20) is zero. https://bugs.ruby-lang.org/issues/8401#change-43239 Author: akr (Akira Tanaka) Status: Closed Priority: Normal Assignee: mrkn (Kenta Murata) Category: ext Target version: ruby -v: ruby 2.1.0dev (2013-05-13 trunk 40697) [x86_64-linux] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN ふと見つけたのですが、BigDecimal.new("2").power(1e20) が 0.0 になります。 % ./ruby -v -rbigdecimal -e 'puts BigDecimal.new("2").power(1e20)' ruby 2.1.0dev (2013-05-13 trunk 40697) [x86_64-linux] 0.0 以下のように、power の引数が 1e1 や 1e2 なら値が出てきて、 1e10 ならエラーになるのに、 1e20 になるとまたエラーじゃなくなって 0.0 になっちゃうのは 変ではないでしょうか。 % ./ruby -rbigdecimal -e 'puts BigDecimal.new("2").power(1e1)' 0.1024E4 % ./ruby -rbigdecimal -e 'puts BigDecimal.new("2").power(1e2)' 0.1267650600228229401496703205376E31 % ./ruby -rbigdecimal -e 'puts BigDecimal.new("2").power(1e10)' -e:1:in `power': integer 10000000000 too big to convert to `int' (RangeError) from -e:1:in `
' -- http://bugs.ruby-lang.org/