From: Shin-ichiro HARA Date: 2006-07-05T19:18:44+09:00 Subject: [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で十分なことが多いと思います。