本文介绍了这是溢出吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这段代码:
struct timeval start, end;
gettimeofday(&start, NULL);
//code I'm timing
gettimeofday(&end, NULL);
long elapsed = ((end.tv_sec-start.tv_sec)*1000000 + end.tv_usec-start.tv_usec);
ofstream timeFile;
timeFile.open ("timingSheet.txt");
timeFile << fixed << showpoint;
timeFile << setprecision(2);
timeFile << "Duration: " << elapsed << "\n";
timeFile.close();
哪个会输出已经通过的微秒数。但是,如果我更改这一行
Which will output the number of microseconds that has passed. However, if I change this line
long elapsed = ((end.tv_sec-start.tv_sec)*1000000 + end.tv_usec-start.tv_usec);
到:
long elapsed = ((end.tv_sec-start.tv_sec)*1000000 + end.tv_usec-start.tv_usec)/1000000.0;
我得到一个负值。为什么会发生这种情况?
I get a negative value. Why does this happen?
推荐答案
我使用从SO的某个地方借来的计时课。
I use a timing class that I borrowed from somewhere here on SO.
#include <time.h>
#include <sys/time.h>
#include <iomanip>
#include <iostream>
using namespace std;
class Timer
{
private:
timeval startTime;
public:
void start()
{
gettimeofday(&startTime, NULL);
}
double stop()
{
timeval endTime;
long seconds, useconds;
double duration;
gettimeofday(&endTime, NULL);
seconds = endTime.tv_sec - startTime.tv_sec;
useconds = endTime.tv_usec - startTime.tv_usec;
duration = seconds + useconds/1000000.0;
return duration;
}
static void printTime(double duration)
{
cout << setprecision(6) << fixed << duration << " seconds" << endl;
}
};
例如:
Timer timer = Timer();
timer.start();
long x=0;
for (int i = 0; i < 256; i++)
for (int j = 0; j < 256; j++)
for (int k = 0; k < 256; k++)
for (int l = 0; l < 256; l++)
x++;
timer.printTime(timer.stop());
产生 11.346621秒
。
对于我的,我得到:
Number of collisions: 0
Set size: 16777216
VM: 841.797MB
22.5810500000 seconds
这篇关于这是溢出吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!