2011年5月 9日

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

えぐち@エスアンドイーです

2011年5月9日12:55 Tanaka Akira <akr@xxxxx>:
> 2011年5月9日10:29 Mitsuo KASAHARA <m.kasahara13@xxxxx>:
>> と、小数点以下6桁の情報を持つ時刻情報の差分を計算したら、何故か
>> 一つ目の方では
>> 0.00629800000000004
>> と

>> 00000000004
>> が余計にくっついて出力されました。

> 桁落ちというものでは。

桁落ちという見立ては同じですが、

class Time
TICK = 1000000
def -(y)
return ((self.tv_sec * TICK + self.tv_usec) -
(y.tv_sec * TICK + y.tv_usec)).to_f / TICK
end
end

の様に、1マイクロ分解能で固定小数点処理したほうが
よりロバストではないでしゅうか?

% cat qaz2.rb
#! /usr/bin/ruby -KU
require 'time'

a="2011-04-15 10:52:51.004956"
b="2011-04-15 10:52:50.998658"
print("#{Time.parse(a)-Time.parse(b)}\n")

a="2011-04-15 10:52:48.977298"
b="2011-04-15 10:52:48.970890"
print("#{Time.parse(a)-Time.parse(b)}\n")

class Time
TICK = 1000000
def -(y)
return ((self.tv_sec * TICK + self.tv_usec) -
(y.tv_sec * TICK + y.tv_usec)).to_f / TICK
end
end

a="2011-04-15 10:52:51.004956"
b="2011-04-15 10:52:50.998658"
print("#{Time.parse(a)-Time.parse(b)}\n")

a="2011-04-15 10:52:48.977298"
b="2011-04-15 10:52:48.970890"
print("#{Time.parse(a)-Time.parse(b)}\n")

% ruby -v qaz2.rb
ruby 1.8.7 (2010-08-16 patchlevel 302) [amd64-freebsd8]
0.00629800000000003
0.006408
qaz2.rb:14: warning: method redefined; discarding old -
0.006298
0.006408

 えぐち


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




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