2006年7月 5日

[ruby-list:42523] Re: float の値がずれる

原です。

>斎藤と申します。皆さんBigDecimal嫌いなのかな :-(

んなことないですって。(^^;

>もちろんいろいろな考えがあるとは思うのですが、「小数は有理数である」
>という思考の段階を一段踏まなければならないというのは(とりあえず

>自分に取っては)直観に反するような気もします。やはりここはBigDecimalの
>出番ではないでしょうか。

hirocyさんの質問には、まずBigDecimalを紹介すべきでしょう。
実際、るびきちさんが紹介しましたし。
>さらに実装の都合上、どうがんばってもRationalの方が(下では10倍以上)
>遅いです。 Floatの誤差の問題でRationalの利用を推奨する理由はあまりない
>ように思うのですが…。逆にメリットがあるなら、教えていただけると幸いです。

問題の設定の仕方ではBigDecimalが解答にならない場合があります。

例えば意外なことにFloatをBigDecimalに変換することはできません。
BigDecimalのインプットはStringですから。意外じゃなくて、原理的に
当然ですけど。

もちろん、BigDecimal(0.01.to_s)などとすればいいわけですけど、例え
ば、BigDecimal(100000000000000.1.to_s)は、0.1E15であって、
0.1000000000000001E15ではありません。つまりFloat->BigDecimalには
標準的な手段がなく、別の方法つまりRational経由とかに話が飛んだり
するわけです。

実際にはFloat->BigDecimalが必要なケースがそうあるわけでもなく、
String->BigDecimalで十分なことが多いと思います。


投稿者 xml-rpc : 2006年7月 5日 19:18
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/42452
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。