掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
足し算の処理速度を計測するには? (ID:56571)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
プラットホーム:IBM 2.8GHz Intel Pentium 4 OS:Windows XP Professional 開発環境:Visual C++ 6.0 SP6 プロジェクト:コンソールアプリケーション 素朴な疑問なのですが足し算の処理速度を知りたいと思い以下のような簡単なコードを作って実験してみました。 #include <stdio.h> #include <stdlib.h> #include <windows.h> int main(void) { { int count1 = GetTickCount(); int j = 0; for(int i=1;i<=1000000000;i++) j=j+1; int count2 = GetTickCount(); printf("int + on 1000000000 loop\n"); printf("%2.3f 秒\n", (count2 - count1)/1000.0); } { int count1 = GetTickCount(); int j = 0; for(int i=1;i<=2000000000;i++) { j=j+1; } int count2 = GetTickCount(); printf("int + on 2000000000 loop\n"); printf("%2.3f 秒\n", (count2 - count1)/1000.0); } { int count1 = GetTickCount(); int j = 0; for(int i=1;i<=1000000000;i++) { j=j+1; j=j+1; } int count2 = GetTickCount(); printf("int + & + on 1000000000 loop\n"); printf("%2.3f 秒\n", (count2 - count1)/1000.0); } { int count1 = GetTickCount(); int i = 1; Jump: i++; if(i <= 1000000000) goto Jump; int count2 = GetTickCount(); printf("semi for on 1000000000 loop\n"); printf("%2.3f 秒\n", (count2 - count1)/1000.0); } { int count1 = GetTickCount(); for(int i=1;i<=1000000000;i++); int count2 = GetTickCount(); printf("for on 1000000000 loop\n"); printf("%2.3f 秒\n", (count2 - count1)/1000.0); } return 0; } 結果が以下のようになりました。 int + on 1000000000 loop 2.173 秒 int + on 2000000000 loop 4.367 秒 int + & + on 1000000000 loop 5.227 秒 semi for on 1000000000 loop 1.783 秒 for on 1000000000 loop 1.762 秒 Press any key to continue このコードで本当に正確な計測ができているのかどうかさえ分からないのですが、結果を見ると「int + on 1000000000 loop」ではfor文と足し算を1000000000回繰り返して2.173秒掛かり、「int + on 2000000000 loop」ではfor文と足し算を2000000000回繰り返して4.367秒掛かることまでは、結果が約2倍となっていて理解できるのですが、「int + & + on 1000000000 loop」ではfor文と足し算ともうひとつ足し算を1000000000回繰り返して5.227秒掛かっています。処理的には「int + on 2000000000 loop」と「int + & + on 1000000000 loop」は同じことを実行しているのに結果が4.367秒と5.227秒となり約1秒も異なってしまいました。いったいなぜ「int + & + on 1000000000 loop」の方がより多くの時間が掛かってしまったのか理由が分からなくて投稿させていただきました。どなたかご教授よろしくお願いします。 またfor文の処理速度はどうなのだろうと思い、一応コードを考えて実行してみました。結果は「for on 1000000000 loop」では1.762秒と出ました。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.