ページ 11

gettimeofdayを使ったプログラムスピードの測定について。

Posted: 2012年11月26日(月) 20:02
by いちこ
宜しくお願いします。

コード:

double get_dtime(void)
 {
 struct timeval tv;
 gettimeofday(&tv, NULL);
 //ミリ秒を計算
return ((double)(tv.tv_sec)*1000 + (double)(tv.tv_usec)*0.001); //★
 }

プログラムスピードを計る際、↑のような関数を作成して使用するとよいと調べたのですが、★の行で何をしているのかわかりません。
tv_secは秒、tv_usecはマイクロ秒だと思うのですが、なぜこのような計算をして、ミリ秒が返るのでしょうか…。
特に、足し算の部分で何をしているのかわかりません。

調べてもわからなかったので、どなたか詳しい方がおられましたら、解説をしていただけるとうれしいです。

Re: gettimeofdayを使ったプログラムスピードの測定について。

Posted: 2012年11月26日(月) 20:08
by box
いちこ さんが書きました:

コード:

 //ミリ秒を計算
return ((double)(tv.tv_sec)*1000 + (double)(tv.tv_usec)*0.001); //★

プログラムスピードを計る際、↑のような関数を作成して使用するとよいと調べたのですが、★の行で何をしているのかわかりません。
tv_secは秒、tv_usecはマイクロ秒だと思うのですが、なぜこのような計算をして、ミリ秒が返るのでしょうか…。
特に、足し算の部分で何をしているのかわかりません。
tv_sec:秒単位の値→1秒は1000ミリ秒なので、ミリ秒に変換するには1000倍する必要あり
tv_usec:マイクロ秒単位の値→1マイクロ秒は1/1000ミリ秒なので、ミリ秒に変換するには1000で割る必要あり
両者を合算すれば、ミリ秒の値がわかる。

Re: gettimeofdayを使ったプログラムスピードの測定について。

Posted: 2012年11月26日(月) 20:17
by いちこ
>>boxさん
返信ありがとうございます。
成程です…!
私は二つを足すと、時刻の値が2倍になってしまうと思っていたのですが、勘違いをしていたようです。
マイクロ秒は、紀元からの経過時間のマイクロ秒でなく、秒と秒の間のマイクロ秒なんですね。

Re: gettimeofdayを使ったプログラムスピードの測定について。

Posted: 2012年11月26日(月) 20:22
by いちこ
ありがとうございました。
精進します。