From: "Shota Fukumori (sora_h)" Date: 2011-05-09T10:44:52+09:00 Subject: [ruby-list:48063] Re: 小数点つき時刻情報とTime#parse sora_hです。 2011/5/9 Mitsuo KASAHARA : > と、小数点以下6桁の情報を持つ時刻情報の差分を計算したら、何故か > 一つ目の方では > 0.00629800000000004 > と > 00000000004 > が余計にくっついて出力されました。 浮動小数点数の仕様で誤差が生じてしまいます。 参考: * http://download.oracle.com/docs/cd/E19957-01/806-4847/ncg_goldberg.html * http://wiki.github.com/rdp/ruby_tutorials_core/ruby-talk-faq#floats_imprecise * http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems > パターンをイロイロ試したわけではないのですが、とあるログの時刻情報の差分を > 大量に計算していたところto_fをしなかったときに390個中1個だけ > 上記のように余計な桁が出力されました。 > > 何が悪いのかよく分からないのですが、小数点以下6桁の引き算なので、 > そのまま小数点以下6桁(以内)の答えが欲しいのですが、どのようにしたら良いか > ご助言いただけませんでしょうか。 誤差が無いのを望んでいるのなら、 BigDecimal (標準添付) の使用をおすすめします。 しかし、TimeからFloatに変換するときにすでに誤差が生じるなどで誤差無しは厳しいと思います。 -- Shota Fukumori a.k.a. @sora_h - http://codnote.net/