17

Cclock()関数はゼロを返すだけです。さまざまなタイプを使用してみましたが、改善されませんでした...これは、精度の高い時間を測定する良い方法ですか?

#include <time.h>
#include <stdio.h>

int main()
{
    clock_t start, end;
    double cpu_time_used;

    char s[32];

    start = clock();

    printf("\nSleeping 3 seconds...\n\n");
    sleep(3);

    end = clock();

    cpu_time_used = ((double)(end - start)) / ((double)CLOCKS_PER_SEC);

    printf("start = %.20f\nend   = %.20f\n", start, end);
    printf("delta = %.20f\n", ((double) (end - start)));
    printf("cpu_time_used  = %.15f\n", cpu_time_used);
    printf("CLOCKS_PER_SEC = %i\n\n", CLOCKS_PER_SEC);

    return 0;
}
Sleeping 3 seconds...

start = 0.00000000000000000000
end   = 0.00000000000000000000
delta = 0.00000000000000000000
cpu_time_used  = 0.000000000000000
CLOCKS_PER_SEC = 1000000

プラットフォーム: Intel 32 ビット、RedHat Linux、gcc 3.4.6

4

6 に答える 6

26

clock()使用された CPU 時間を報告します。 sleep()CPU 時間を使用しません。したがって、あなたの結果はおそらく正確に正しいでしょうが、あなたが望むものではありません.

于 2010-01-25T17:58:36.900 に答える
6

man clock. それはあなたが思っているものを返すことではありません。またman gettimeofday、それはあなたが望むものである可能性が高いです。

于 2010-01-25T17:57:54.697 に答える
4

clock_t は整数型です。%f では印刷できません。差が 0 である理由については、Fred の回答を参照してください。

于 2010-01-25T17:57:32.377 に答える
4
 printf("start = %.20f\nend   = %.20f\n", start, end);

次のようにする必要があります。

 printf("start = %d\nend   = %d\n", start, end);
于 2010-01-25T17:58:00.087 に答える
4

呼び出しsleep()によって CPU 時間が消費されることはありません。ただし、少し違いが見られるはずです。次の行の printf タイプの不一致バグを修正しました。

printf("start = %.20f\nend   = %.20f\n", start, end);

そして、それは私のマシンで妥当な結果をもたらしました:

start = 1419
end   = 1485
delta = 66
cpu_time_used  = 0.000066000000000
CLOCKS_PER_SEC = 1000000

gettimeofday()プログラムの実行に費やされた実際の時間を取得しようとする場合があります。

于 2010-01-25T18:00:40.763 に答える