Bug #8401

BigDecimal.new("2").power(1e20) is zero.

Added by Akira Tanaka 11 months ago. Updated 5 months ago.

[ruby-dev:47340]
Status:Closed
Priority:Normal
Assignee: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

Description

ふと見つけたのですが、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 toint' (RangeError)
from -e:1:in `'

History

#1 Updated by Kenta Murata 11 months ago

  • Category set to ext
  • Assignee set to Kenta Murata

1.9.3p392 では -Infinity になるから、2.0.0p0 で導入されたバグですねぇ。

#2 Updated by Akira Tanaka 11 months ago

2013/5/14 mrkn (Kenta Murata) muraken@gmail.com:

1.9.3p392 では -Infinity になるから、2.0.0p0 で導入されたバグですねぇ。

こっちの Debian GNU/Linux では 1.9.3p392 でも 0.0 ですねぇ。
そちらの環境は書いてありませんが、環境依存でしょうか。

% ruby-1.9.3p392 -v -rbigdecimal -e 'puts BigDecimal.new("2").power(1e20)'
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]
0.0

あと、2**(1e20) が負になるのはおかしいと思うので、-Infinity はそれはそれで
変だと思います。
--
[田中 哲][たなか あきら][Tanaka Akira]

#3 Updated by Kenta Murata 5 months ago

  • 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

Also available in: Atom PDF