0

私は次の宿題を与えられました。

nlogn、n2、n5、2n、および n! を実行するのにかかる時間をコンピューターでテストするプログラムを作成します。n=5、10、15、20の追加。

コードを書きましたが、常に実行時間が 0 になっています。誰か助けてくれませんか? ありがとう

#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
int main()
{
 float n=20;
 time_t start, end, diff;
  start = time (NULL);
  cout<<(n*log(n))*(n*n)*(pow(n,5))*(pow(2,n))<<endl;
  end= time(NULL);
 diff = difftime (end,start);
 cout <<diff<<endl;
 return 0;
}
4

5 に答える 5

5

秒精度の time() よりも優れているのは、ミリ秒の精度を使用することです。ポータブルな方法は、例えば

int main(){
clock_t start, end;
double msecs;

start = clock();
/* any stuff here ... */
end = clock();
msecs = ((double) (end - start)) * 1000 / CLOCKS_PER_SEC;
return 0;
}
于 2011-08-07T18:55:46.903 に答える
3

各計算をループで数千回実行することで、の低解像度を克服し、time意味のある結果を得ることができます。結果を報告するときは、反復回数で割ることを忘れないでください。

これは特に正確ではありませんが、この割り当てではおそらく問題ではありません。

于 2011-08-07T18:45:32.333 に答える
2

少なくとも Unix ライクなシステムでは、 time()1 秒単位の粒度しか与えられないため、非常に短い時間しかかからないタイミングの計測には役に立ちません (ループで何度も実行しない限り)。関数を見てみましょうgettimeofday()。現在の時刻がマイクロ秒単位で表示されます。またはclock()、実時間ではなく CPU 時間を測定する の使用を検討してください。

于 2011-08-07T20:16:11.317 に答える
1

コードの実行が速すぎて、1970年1月1日UTCの00:00時間から経過した秒数を返す時間関数で検出できません。

このコードを使用してみてください。

inline long getCurrentTime() {
    timeb timebstr;
    ftime( &timebstr );
    return (long)(timebstr.time)*1000 + timebstr.millitm;
}

これを使用するには、sys/timeb.hを含める必要があります。

実際には、ループ内で計算を繰り返して、より正確な結果を取得することをお勧めします。

于 2011-08-07T18:44:27.540 に答える
1

おそらく、Windows High Performance Timer など、より正確なプラットフォーム固有のタイマーを見つける必要があります。また、コンパイラがほとんどすべてのコードを最適化または削除していることに気付くかもしれません。

于 2011-08-07T18:53:03.863 に答える