为什么 clock() 返回 1.84467e+13?
Why is clock() returning 1.84467e+13?
我正在尝试为我在 C++ 中获得的代码计时。我有一个内部循环和一个外部循环,我想分别计时,但同时进行。出于某种原因,当我这样做时,其中一个实例 returns 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;
}
你的 clock_t
显然是一个无符号的 64 位类型。
您正在服用 tick - tock
,其中 tock
是在 tick
之后测量的,所以如果两者之间存在任何差异,它将尝试生成一个负数——但由于它是无符号类型,因此它会环绕成为接近该类型可以表示的最大数字的东西。
显然,您真的想改用 tock-tick
。
假设 tic = 2ms,tac 为 4ms;所以当你做 tic-tac(2-4) 时,显然会产生一个负数。即使它给出一个正数,它也不会是实时的。而且,它生成的数字(在我的电脑上没有出现)是一个很大的数字,所以,尝试使用操纵器;
#include"iomanip"
cout << fixed << showpoint;
cout << setprecision(2);
可能有用..
我正在尝试为我在 C++ 中获得的代码计时。我有一个内部循环和一个外部循环,我想分别计时,但同时进行。出于某种原因,当我这样做时,其中一个实例 returns 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;
}
你的 clock_t
显然是一个无符号的 64 位类型。
您正在服用 tick - tock
,其中 tock
是在 tick
之后测量的,所以如果两者之间存在任何差异,它将尝试生成一个负数——但由于它是无符号类型,因此它会环绕成为接近该类型可以表示的最大数字的东西。
显然,您真的想改用 tock-tick
。
假设 tic = 2ms,tac 为 4ms;所以当你做 tic-tac(2-4) 时,显然会产生一个负数。即使它给出一个正数,它也不会是实时的。而且,它生成的数字(在我的电脑上没有出现)是一个很大的数字,所以,尝试使用操纵器;
#include"iomanip"
cout << fixed << showpoint;
cout << setprecision(2);
可能有用..