1. ホーム
  2. c

[解決済み] CLOCKS_PER_SEC in C language found the time.h library

2022-02-16 18:55:10

質問

CLOCKS_PER_SECはシステムによって異なるのでしょうか、それともOSによって一定なのでしょうか、それとも特定のシステムのプロセッサに依存するのでしょうか? また、私のコードの出力を説明するのを助けてください...それは正しいですか?

#include<stdio.h>
#include<time.h>
int main()
{
int a;
long int b;
clock_t start, end;

start = clock();

//Code for which the time is to be calculated
for(a=0;;a++)
{
    if(a<0)
    {
        break;
    }
}
printf("int : %u\n",a);
for(b=0;;b++)
{
    if(b<0)
    {
        break;
    }
}
printf("long int :%u\n",b);
//code is over

end = clock();

//CLOCKS_PER_SECOND : the number of clock ticks per second
printf("Starting Time:%u\n",start);
printf("Ending Time:%u\n",end);
printf("CLOCKS_PER_SEC:%u",CLOCKS_PER_SEC);
printf("\nNumber of clock ticks:%u",(end - start));
printf("\nTotal time:%u",(double)(end - start)/CLOCKS_PER_SEC);
return 0;
}

を出力します。

int : 2147483648
long int :2147483648
Starting Time:0
Ending Time:9073
CLOCKS_PER_SEC:1000
Number of clock ticks:9073
Total time:1099511628
Process returned 0 (0x0)   execution time : 15.653 s
Press any key to continue.

解決方法は?

<ブロッククオート

CLOCKS_PER_SECはシステムによって異なるのでしょうか、それともあるOSでは一定なのでしょうか、それともその特定のシステムのプロセッサに依存するのでしょうか?

CLOCKS_PER_SEC は、最終的にはOSではなく、コンパイラとその標準ライブラリの実装によって決定されます。 マシンやOS、その他の要因が、コンパイラが提供するものに寄与していますが。

私のコードの出力を説明するのを手伝ってください。

いいえ。 printf("\nTotal time:%u",(double)(end - start)/CLOCKS_PER_SEC); が使っているのは "%u" を印刷するために double . フェリックス・パルメン

CLOCKS_PER_SEC は必ずしも unsigned .
clock_t は必ずしも int . 参照
間違った printf() の指定子は、出力に情報を与えません。
ヒント:すべてのコンパイラの警告を有効にします。

ワイド型にキャストし、一致する印刷指定子を使用します。

clock_t start
// printf("Starting Time:%u\n",start);
printf("Starting Time:%g\n", (double) start);

// printf("CLOCKS_PER_SEC:%u",CLOCKS_PER_SEC);
printf("CLOCKS_PER_SEC:%g\n", (double) CLOCKS_PER_SEC);

// printf("\nTotal time:%u",(double)(end - start)/CLOCKS_PER_SEC);
printf("Total time:%g\n",(double)(end - start)/CLOCKS_PER_SEC);

あるいは、次のように考えてもよいでしょう。 long double .

long double t = (long double)(end - start)/CLOCKS_PER_SEC;
printf("Total time:%Lg\n", t);