ページ 11

clock関数について

Posted: 2014年3月16日(日) 16:44
by turasan
バブルソートにかかった時間を測定するコードを書きました。

実際にバブルソートを行っているfor文の前後で、clock関数を呼び出し、
その二つの差をとることによって、for文にかかった時間を測定しています。

しかしprintf関数で、その時間を出力すると、
0.00000となってしまい、ずっと0が続いてしまいます。試しに小数点以下のケタ数を、
%.10fと書き直してみたのですが、やはりずっと0としか表示されません。

これは、for文にかかった処理時間が、このケタ数では表示できないほどもっと速いということなのでしょうか。
それとも他に何か原因が考えられますでしょうか。

コード:

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

//関数プロトタイプ宣言
void bubble_sort(int sort[], int elenum2);

int main(void)
{

	int ary[] = {16,21,95,32,20,73,73,32,12,5,2,45,29,9,7};

	int elenum1 = 15; //要素数

	bubble_sort(ary, elenum1);

	return 0;
}

//バブルソート関数
void bubble_sort(int sort[], int elenum2)
{
	int i, j, t;
	clock_t start, end;

	start = clock();

	for(i = 0; i < elenum2 -1; i++){
		for(j = elenum2 - 1; j > i; j--){
			if(sort[j-1] > sort[j]){
				t = sort[j];
				sort[j] = sort[j-1];
				sort[j-1] = t;
			}
		}
	}

	end = clock();
	
	for(i = 0; i < elenum2; i++){
		printf("%d, ", sort[i]);
	}
	
	putchar('\n');
	printf("%.5f秒かかりました\n", (double)(end-start)/CLOCKS_PER_SEC);
	return;
}

Re: clock関数について

Posted: 2014年3月16日(日) 16:51
by みけCAT
turasan さんが書きました:これは、for文にかかった処理時間が、このケタ数では表示できないほどもっと速いということなのでしょうか。
その可能性は考えられます。
また、
clockの精度がミリ秒単位程度しかないかもしれません。
試しに、要素数を10000個程度にしてみてください。

Re: clock関数について

Posted: 2014年3月16日(日) 17:35
by turasan
要素数を10000個にしたところ、表示されました。
ちなみに0.8秒ほどでした。

clock関数の精度は環境に依存しているのでしょうか。
だとすると、自分のPC上でより高い精度を表示をしたい場合、clock関数では不可能ということなのでしょうか。

Re: clock関数について

Posted: 2014年3月16日(日) 17:38
by みけCAT
turasan さんが書きました:clock関数の精度は環境に依存しているのでしょうか。
はい。
turasan さんが書きました:だとすると、自分のPC上でより高い精度を表示をしたい場合、clock関数では不可能ということなのでしょうか。
いいえ。PCのマシンが同じでも、OSやコンパイラを変えれば、より高い精度での表示が可能かもしれません。

Re: clock関数について

Posted: 2014年3月16日(日) 17:44
by turasan
OSやコンパイラによって、CLOCKS_PER_SECの定義が違うということなのですか?。
表示の精度はこの定義に依存しているのでしょうか。

Re: clock関数について

Posted: 2014年3月16日(日) 18:01
by みけCAT
turasan さんが書きました:OSやコンパイラによって、CLOCKS_PER_SECの定義が違うということなのですか?。
表示の精度はこの定義に依存しているのでしょうか。
はい。
正確には、表示の精度ではなく計測の精度ですね。
さらに正確には、「計測の精度がこの定義に依存する」ではなく、「計測の精度をCLOCKS_PER_SECに定義する」かもしれません。

Re: clock関数について

Posted: 2014年3月16日(日) 18:15
by turasan
ありがとうざいました。