遠藤です。

現在、Time#- が Rational を返すようになっています。

  $ ./ruby -e 'p Time.now - Time.now'
  (-7/156250)

しかし、Time.now のように inexact な時刻の差分が、exact の
ように見える Rational になるのはよくないと思います。

Time.gm(2000) などは exact な時刻と考えられますが、それでも
以下で Rational が返るのは好ましくないと思います。

  $ ./ruby -e 'p Time.gm(2000) + 0.1 - Time.gm(2000)'
  (3602879701896397/36028797018963968)

よって Time オブジェクトに exact かどうかをあらわすフラグを
持たせる必要があるのではないでしょうか。


ただ、Time#- が Rational を返してもよいと思われる例は、

  $ ./ruby -e 'p Time.gm(2000) + Rational(1, 2) - Time.gm(2000)'
  (1/2)

くらいしか思いつきません。なので Time#- の結果を常に Integer
または Float にするという選択もあるかもしれません。


とりあえず問題提起と提案です。どう思われますでしょう。

-- 
Yusuke ENDOH <mame / tsg.ne.jp>