From: Tanaka Akira Date: 2009-05-15T00:00:48+09:00 Subject: [ruby-dev:38451] Re: [Bug:1.9] exact Time and inexact Time In article , Yusuke ENDOH writes: > 現在、Time#- が Rational を返すようになっています。 > > $ ./ruby -e 'p Time.now - Time.now' > (-7/156250) > > しかし、Time.now のように inexact な時刻の差分が、exact の > ように見える Rational になるのはよくないと思います。 一般に数値計算では、値が持つ誤差よりも充分に高い精度を持って いる数値表現を使う必要があるんじゃないでしょうか。 たとえば、比較的短い時間を扱う用途では、double は妥当な選択 肢かもしれません。 しかし、異なる Epoch へ変換するという用途では double では充 分でないこともあるでしょう。 どちらも Time 同士の引き算で実現できますが、必要な精度は異な ります。 ちなみに、Unix Epoch からナノ秒単位で数えると、今の時刻は double で下のほうのビットを表現できません。なので、double 経 由で他の Epoch に変換して、変換した側で計算すると、精度が落 ちていて適切な値にならない、という可能性もあります。まぁ、具 体的な Epoch と変換のやりかたにもよりますが。 inexact, exact という単純な区別ではなくて、用法によってどの くらいの誤差が許容できるか、という点を議論する必要があるので はないでしょうか。 -- [田中 哲][たなか あきら][Tanaka Akira]