为什么clock()返回1.84467e + 13?

时间:2015-12-17 05:54:30

标签: c++ clock timing

我正在尝试用C ++编写的代码。我有一个内部和外部循环,我想分开时间,但同时。由于某些原因,当我这样做时,其中一个实例返回1.84467e + 13并且总是这个确切的数字。

为什么会这样?

以下是在我的机器上复制效果的最小工作示例:

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main()
{
    long int i, j;
    clock_t start, finish, tick, tock;
    double a = 0.0;
    double adding_time, runtime;

    start = clock();
    for(i=0; i<10; i++)
    {
        a=0.0;
        tick =clock();
        for(j=0; j<10000000; j++)
        {
            a+=1;
        }
        tock= clock();
        adding_time = (double)(tick - tock)/CLOCKS_PER_SEC;
        cout << "Computation time:" << adding_time << endl;

    }
    finish = clock();
    runtime = (double)(finish - start)/CLOCKS_PER_SEC;
    cout << "Total computation time:" << runtime << endl;
}

2 个答案:

答案 0 :(得分:12)

您的clock_t显然是无符号的64位类型。

你正在tick - tocktocktick之后测量,所以如果两者之间有任何差异,那么它会尝试产生一个负数 - 但由于它是一个无符号类型,所以它会变成接近可以在该类型中表示的最大数字的东西。

显然,你确实想要使用tock-tick

答案 1 :(得分:-2)

假设tic = 2ms,tac为4ms;所以当你做tic-tac(2-4)时会明显产生一个负数...即使给出一个正数,它也不会是实时的。而且,它产生的数字(在我的电脑上没有显示)是一个很大的数字,所以,尝试使用操纵器;

#include"iomanip" 
    cout << fixed << showpoint;
cout << setprecision(2);

它可能有用......