From: Tadayoshi Funaba Date: 2008-11-26T22:01:52+09:00 Subject: [ruby-dev:37204] Re: [Bug #793] BigDecimal('Infinity').to_r が零になる > どうもBigDecimalの仕様を見てると > > * BigDecimal.modeという属性があり、どのような時に例外が発 > 生するかグローバルな状態として設定できる > > * デフォルトではあらゆる例外を発生させない そのモードで EXCEPTION_ZERODIVIDE を有効にすると Infinity 自体を作れな くなるんですね。零割で Infinity を生じるのと、Infinity を作ることは別の ように思うのですが、Marshal.load も出来なくなりますね。こういうものなの かな。 $ ./irb-test -rbigdecimal main@190-20081126> b = BigDecimal('Infinity') #=> # main@190-20081126> BigDecimal::mode(BigDecimal::EXCEPTION_ZERODIVIDE,true) #=> 1 main@190-20081126> BigDecimal('Infinity') FloatDomainError: Computation results to 'Infinity' from (irb):3:in `BigDecimal' from (irb):3 from ./bin/irb:12:in `
' main@190-20081126> Marshal.load(Marshal.dump(b)) FloatDomainError: Computation results to 'Infinity' from (irb):5:in `_load' from (irb):5:in `load' from (irb):5 from ./bin/irb:12:in `
'