Project

General

Profile

Actions

Bug #3529

closed

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

Added by mrkn (Kenta Murata) over 13 years ago. Updated almost 13 years ago.

Status:
Closed
Target version:
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

Actions #1

Updated by mrkn (Kenta Murata) over 13 years ago

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

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

=end

Actions #2

Updated by mrkn (Kenta Murata) over 13 years ago

  • Status changed from Open to Closed

=begin

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0