質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

285閲覧

時間計測に関してclock()

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/09/03 07:50

c

1   #include <iostream> 2 #include <time.h> 3 using namespace::std; 4 5 int main(){ 6 7 clock_t start,end; 8 9 start = clock(); 10 11 while(1){ 12 13 int i; 14 i++; 15 cout << i << endl; 16 17 if(i == 1000000){ 18 end = clock(); 19 cout << (end - start) << endl; 20 break; 21 } 22 } 23 24 25 return 0; 26 } 27 28

計測時間が2倍ぐらいになって出力されてしまうのですがなぜでしょうか?
わかる方いましたら回答よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/09/03 08:03

実際にどういう出力されるんでしょうか
退会済みユーザー

退会済みユーザー

2018/09/03 08:05

999953 999954 999955 999956 999957 999958 999959 999960 999961 999962 999963 999964 999965 999966 999967 999968 999969 999970 999971 999972 999973 999974 999975 999976 999977 999978 999979 999980 999981 999982 999983 999984 999985 999986 999987 999988 999989 999990 999991 999992 999993 999994 999995 999996 999997 999998 999999 1000000 2376035
退会済みユーザー

退会済みユーザー

2018/09/03 08:05

こんな感じです
y_waiwai

2018/09/03 08:09

それのどれが問題なんでしょうか
退会済みユーザー

退会済みユーザー

2018/09/03 08:09

2376035
退会済みユーザー

退会済みユーザー

2018/09/03 08:10

これですね
退会済みユーザー

退会済みユーザー

2018/09/03 08:10

実際は12秒ほどでした
guest

回答4

0

ベストアンサー

こんにちは。

iを初期化していないのは気になりますが、ご質問はこれとは無関係ですね。
clock()はCPUを使った時間を返します。CLOCKS_PER_SECで割ると1秒単位の時間となります。
CPU時間とリアルタイムとは異なります。他の処理待ち(例えばsleep)している時はCPUを使っていませんので、clock()にはカウントされません。
多くのシステムでCLOCKS_PER_SECは1,000,000とのことですから、お使いのケースではリアル12秒の間に約2.37秒CPUを使ったということです。

投稿2018/09/03 08:22

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/03 09:24

cpuを使って処理をした時間が測定されるのですね
退会済みユーザー

退会済みユーザー

2018/09/03 09:45

cとc++処理速度どちらが早いのでしょうか?
Chironian

2018/09/03 13:13

ケースバイケースです。 C++の方が記述力は高いですから、C++だけで書ける静的処理とCだけで書ける静的処理ではC++の方が遥かに範囲が広いです。 C++はその分多くの知識が必要ですので習得に時間がかかります。習得時間が少ない人の場合はC言語で記述したほうが高速なプログラムを書けることが多いだろうと思います。
退会済みユーザー

退会済みユーザー

2018/09/03 13:26

わかりました
退会済みユーザー

退会済みユーザー

2018/09/03 16:53

私は大学1年生なのであと4年自由に学ぶことができますので、頑張ってc++やっていこうと思います
guest

0

clock()で得た値はCLOCKS_PER_SECで割らないと現実時間と対比させる事はできません。

c++

1cout << static_cast<double>(end - start) / CLOCKS_PER_SEC << endl;

投稿2018/09/03 08:15

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/03 09:21

了解です!
guest

0

標準出力(cout)にはバッファがあって、
そこに出力するプログラムは
バッファに結果を出力し終わった時点で終了します。
その時の時刻がendになります。

投稿2018/09/03 08:13

taka-saan

総合スコア665

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/03 09:23

なるほど
guest

0

int i;がループの中に入っています。
またiを初期化していないので、ループ内で毎回不定値なっています。
よく無限ループにならないですね…。

投稿2018/09/03 08:09

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/03 09:22

確かにw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問