
プログラムの実行時間の計測について質問させていただきます。
現在,実行時間の計測でclock()関数を使っているのですが誤差が出ます。
timeコマンド(と実際に時計で測った時間)では95分、clock()関数で測った
プログラム全体の実行時間は1376秒(約23分)と誤差が出る状態にあります。
プログラムでclock()関数を使っているのはmain()だけです。
printf()内がおかしいのでしょうか?
詳しい方、回答よろしくおねがいします。
↓プログラム
#include<time.h>
(中略)
clock_t t1,t2,t3,t4;
(中略)
main()
{
struct zahyo P,Q;
int a,b,prime,Ord,sec;
scanf("%d",&a);
(中略)
printf("Q.y = "); scanf("%d",&Q.y);
t1=clock();
Ord=OrdCal(P,a,prime);
t2=clock();
printf("Ord = %d\n",Ord);
printf("OrdCal:%f(s)\n",(double)(t2-t1)/CLOCKS_PER_SEC);
t3=clock();
PohlingBsgs(P,Q,a,prime,Ord);
sec=secretkey();
t4=clock();
printf("secretkey=%d\n",sec);
printf("Decipher:%f(s)\n",(double)(t4-t3)/CLOCKS_PER_SEC);
printf("Total :%f(s)\n",(double)(t4-t1)/CLOCKS_PER_SEC);
}
実行結果
Ordcal:74.170000(s)
Decipher:1302.722704(s)
Total :1376.902104(s)
real 94m33.445s
user 94m30.900s
sys 0m0.980s
No.3ベストアンサー
- 回答日時:
> time.hの関数を見たところ時間が測れるもので大きい数に対応している
> ようなものはないように思えます。小刻みに時間を測るのでしょうか?
> 何か良い方法はありますか?よろしかったら教えてください。
例えば、time() 関数と difftime()関数を使用すれば精度が秒ですが、長い時間をはかることができます。
clock()関数を使用するなら、やっぱり小刻みに時間をとっていくのが一番簡単かもしれません。
参考URL:http://www.bohyoh.com/CandCPP/C/Library/time.htm …
No.2
- 回答日時:
t1~t4の変数がオーバーフローしているのではないでしょうか?
CLOCKS_PER_SEC=100,000として、オーバーフローしていると考えると、Totalの本来の時間は (t4-t1) の 1376902104 に 2^32=4294967296 を加えた時間になります。
これは 5671869400 となり、CLOCKS_PER_SECで割ると約5,672秒(約95分)となりますね。
この回答への補足
回答していただいてありがとうございます。
2^31でオーバーフローしていました。ということは90分を超えたりする
とclock()は使えないですよね。
time.hの関数を見たところ時間が測れるもので大きい数に対応している
ようなものはないように思えます。小刻みに時間を測るのでしょうか?
何か良い方法はありますか?よろしかったら教えてください。
No.1
- 回答日時:
clock関数というのは、その処理系での最良の近似を返すことだけが規定されており、分解能や精度などに関しては一般的には何も保証されません。
ですから、常に123という値が返ってきたとしても、性能面はともかく、規格上の機能要件は満たしていることになります。また、プロセッサ時間が無効か表現不能の場合には(clock_t)-1を返します。特定の処理系に関する情報が欲しいのであれば、まずはその処理系のマニュアルを熟読してください。それでもわからなければユーザーサポートを利用するか、最低限、対象となる処理系を特定した上で再質問してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
C言語に関する質問です
-
コマンドラインに出力した文字...
-
*を使ったジグザグのラインをプ...
-
c言語
-
High-performance Embedded Wor...
-
scanfに文字が入力されたときに...
-
4の倍数を論理演算で表す。。
-
ホームページをC言語で作りたい...
-
8人分のテストの点数を入力し、...
-
改行について 1行に何個かづ...
-
2次方程式の解の表示
-
cshの文字列操作(0埋め)
-
C言語 (ラックナンバー)
-
C言語の数値入力
-
すごろくに使用するサイコロ
-
ガウスの消去法、後退代入について
-
c言語で2000年以降カレンダーを...
-
C言語での数字の花形表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンパイルエラーについて
-
printf で二進表示を行いたい。
-
コマンドラインに出力した文字...
-
(C言語)めちゃくちゃな値にな...
-
c言語でAからZまでを表示する...
-
printfの出力内の文字をdefine...
-
defineで定数が置き換えられな...
-
c言語で2000年以降カレンダーを...
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
4の倍数を論理演算で表す。。
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
教えてください!!
-
Cプログラムについて
-
サイコロをふって、出た目のパ...
-
strcmp
-
じゃんけんゲームの応用
-
C言語でマウス入力(クリックや...
-
printfの有無で値が変化する
おすすめ情報