2016-09-01 5 views
0

したがって、gettimeofdayを使用してコード実行の経過時間を調べようとしています。しかし、私が標準出力に出力するとき、私はこの非常に大きな数を取得します。実行にはわずか1秒しかかかりませんが、出力にはかなりの時間がかかります。gettimeofdayを使用して経過時間をミリ秒単位で調べようとしています

struct timeval start, end; 

gettimeofday(&start, NULL); 

//code 

gettimeofday(&end, NULL); 
printf("Elapsed Time = %ld\n", (end.tv_sec - start.tv_sec) + ((end.tv_usec - start.tv_usec)/1000000.0); 

コードは、1秒未満で実行されるが、私の出力は、 - > 140734185085712

+0

「end.tv_usec」から 'start.tv_usec'を減算するだけでは、43から19を計算するときに3から9を引くことはできません。 –

+0

@SteveSummit:可能です。 43 - 19は '(4-1)* 10 +(3-9)'です.3-9から得られる-6は最初の最初のビットから正しい答えに30を減らすために必要なものです。 –

+1

ええ、私はあまりにもすばやくコメントしたと思いますが、私は本当の問題を完全に逃しました。私の防衛では、 'struct timeval'の' tv_usec'フィールドが符号なしだったとすると、アンダーフローに問題があるかもしれません。 (しかし、通常は署名されているので気にしないでください) –

答えて

1

%のLDとのprintfの代わりにフロートの整数を期待しています。 %ldの代わりに%fなどを試してください。また、マイクロ秒の部分でラップアラウンドをチェックして対処したいかもしれません。

+0

この夏休みは本当に来て、お尻で私を噛んで、明らかに私の脳の塊でもあります。ありがとう – Javant

+0

こんにちは、心配しないでください。私たちすべてに起こります。これらの種類のミスをするほど、より良いものを除外することができます。 –

関連する問題