From: Shigeo Kobayashi Date: 2003-07-31T13:23:08+09:00 Subject: [ruby-dev:21037] Re: [BigDecimal] exception handling 小林です。 この話題は、そろそろおしまいにしたいと思います。 ----- Original Message ----- From: "Tadashi Saito" Subject: [ruby-dev:21031] Re: [BigDecimal] exception handling > 現状の、nilを返すのみの挙動が望ましくないのでは、という事です。 > これはBigDecimal.mode(BigDecimal::EXCEPTION_FOO, true) > の話とは関係なく、エラーの方が望ましいと思います。 BigDecimal.mode(BigDecimal::EXCEPTION_FOO, ...) の指定は 「BigDecimal のモジュール内で exception を発生、または無視するのか をユーザが積極的に制御する」という Float にはない前提があります。 従って、BigDecimal.mode(BigDecimal::EXCEPTION_FOO,false) とした場 合、ユーザが「raise するな」と言っているわけですから、それを覆すだ けの理由がないかぎり前提に従います。 では、この前提を覆すほど to_i で常に raise する意味があるかということになります。 まず、BigDecimal.mode(BigDecimal::EXCEPTION_FOO,true) にすれば raise する(単なるデフォルトの話)わけです。 斉藤さんも認めているように「早い段階でユーザに知らせる」という観点 では to_i で raise しても遅すぎるし、本来 raise すべきタイミングは a = 0.0/0.0 等という計算を実行した時点です。 BigDecimal では、この時点で raise しますが Float はしません。 to_i で BigDecimal.mode を無視して raise すれば確かに表面上は Float と同じ事になりますが、 NaN の発生場所を知る役にはたちま せん。従って、ユーザが「raise するな」と言っていることを守るという 前提を無視してまでやる価値があるとは思えません。 # あと、送っていただいたパッチですが、現時点で計算結果に影響 # ような、明らかなバグ以外は直ちに取り込む余裕はありません。 # 時間ができた段階であるべき姿をもう一度考えてから参考にさせ # てもらいます。 ---- 小林 茂雄 shigeo@tinyforest.jp