• 締切済み

計算時間の精度

 現在,OSがWindows2000でtimeGetTime関数をtimeBeginPeriodと一緒に使用しています. そこでtimeGetTimeの精度を検証するために,timeGetTimeの間に「1+1」を複数回入れてtimeGetTime関数の精度を検証しました.  結論から言うと「1+1」の計算回数を多くするほど標準偏差が増加する傾向がみられました.  前置きが長くなりましたが,ここからが質問です. 「1+1」のような計算の計算時間は一定なのでしょうか? この標準偏差の増加の原因がtimeGetTimeの誤差の蓄積なのか,「1+1」の誤差の蓄積なのか,どちらの影響が大きいと考えられるのか教えてください. 宜しくお願いします

みんなの回答

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

timeGetTimeはWindows起動からの経過時間をms単位 で返すもののようですね。ということは、他のプロセスが実行されている場合にも進んでしまいます。あなたが行った手法ではtimeGetTimeの精度は測れません。 1+1のような計算の所要時間は一定ではありません。というのも、他のプロセスの動きその他によって、CPUのキャッシュがヒットしたりミスしたりで、所要時間が変動するからです。

  • keibou21
  • ベストアンサー率31% (18/58)
回答No.1

どのコンパイラをお使いか記述されていませんので正確なことは言えませんが、 最近のコンパイラでは「定数+定数」の結果はコンパイル時に決定して普遍ですので、ソースコード上は1+1でもコンパイル結果は定数の2になっているはずです。 ですので、正確には"計算時間が一定"という表現は当てはまりません。 さて、本題ですが純粋にtimeGetTimeを呼び出したときのオーバーヘッドが原因かと思われます。

関連するQ&A