From: Tadashi Saito Date: 2008-02-13T21:06:14+09:00 Subject: [ruby-dev:33760] Re: bigdecimal 斎藤と申します。 On Mon, 11 Feb 2008 10:49:04 +0900 Tadayoshi Funaba wrote: > > 上記であれば、BigDecimal(1.1.to_s)となるように内部でいじる手もありますが、 > > たとえば BigDecimlal(3.14159265358979323846.to_s) の結果は、入力の精度が > > 落ちてしまうという点でユーザの意図するものではないかもしれません。 > > 現在の Float#to_d では、まさにそのようにしているのですが、その浮動小数 > 点数が正しいとして、一応正確に変換することは可能ですね。 ここはちょっと自分の書き方が悪かったかもしれません。ユーザがタイプした リテラルと内部で処理されているものを比べて、「正しい」ということをユーザが 確認する手段がないという点で、「意図するものではないかも」と書きました。 つまり BigDecimlal(3.14159265358979323846) != BigDecimlal("3.14159265358979323846") が成り立つということが、ユーザにとってどこまで分かりやすく使いやすいもの なのか、という問いです。ここでは意図的にDBL_DIGをはみでる桁数のリテラルを 例示しましたが、もっと少ない桁数で上記不等号が成り立つ例もあるでしょう。 > ありがとうございます。実は、僕自身も同じようなことを過去に繰り返し言っ > てるはずなんですが。ruby の数値系は変らないようで。 数値系というか、小林さん自身がとても強いポリシーをお持ちのようで(土壇場の #ifdefコメントアウトで回避された、BigDecimal("1")+"2" => BigDecimal("3") であるとか)、自分の拙い表現では有益な議論をするのが難しいと感じ、5年前以来 自分はほとんどBigDecimalに触っていません。 それ以来、既存クラスとの親和性を重視したAPIにリデザインした自前ライブラリを 作り始めて、実装面でも効率の良いものになりましたが、力不足で公開には至って いません。 最近再び触り始めたので、とりあえずリリースしようかと思っています。 その暁には、がーっとたくさん御意見を拝聴できれば幸いです。 # という、自分にプレッシャーをかけるHack。 -- 斎藤ただし