2011年5月 9日

[ruby-list:48064] Re: 小数点つき時刻情報とTime#parse

西谷@関学・理工・情報科学です.
私は,C風に
printf("%10.6f\n",Time.parse(a).to_f-Time.parse(b).to_f)
としています.

On 2011/05/09, at 10:44, Shota Fukumori (sora_h) wrote:

> sora_hです。

>
> 2011/5/9 Mitsuo KASAHARA <m.kasahara13@xxxxx>:
>> と、小数点以下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/
>

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




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