Bug #3529

BigDecimal.mode(BigDecimal::EXCEPTION_*) の初期値が0になっている

Added by Kenta Murata almost 5 years ago. Updated almost 4 years ago.

Status:Closed
Priority:Normal
Assignee:Kenta Murata
ruby -v:ruby 1.9.3dev (2010-07-03 trunk 28532) [x86_64-darwin10.4.0] Backport:

Description

=begin
BigDecimal.mode で設定可能な例外モードの値は true または false になっており、
これらの値以外を設定しようとするとエラーになります。
ところが、例外モードの初期値は 0 になっています。

$ ruby -rbigdecimal -ve 'p %w(NaN INFINITY UNDERFLOW ZERODIVIDE).map{|x| BigDecimal.mode(BigDecimal.const_get(:"EXCEPTION_#{x}")) }'
ruby 1.9.3dev (2010-07-03 trunk 28532) [x86_64-darwin10.4.0]
[0, 0, 0, 0]

このままでは以下のようなコードでエラーになる場合があるので、修正が必要です。

begin
last_mode = BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY)
BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY, false)
...
ensure
# ここでエラーになる場合がある
BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY, last_mode)
end
=end

History

#1 Updated by Kenta Murata almost 5 years ago

=begin
よくコードを読んでみると、これはバグではなくて仕様なんですね。
ということで、このチケットは取り下げます。

しかし、真偽値を設定したのに、読み出し時の値は全モード定数を OR した整数値が返ってくるのは気持ち悪いですね。

=end

#2 Updated by Kenta Murata almost 5 years ago

  • Status changed from Open to Closed

=begin

=end

Also available in: Atom PDF