程序的执行时间为"5E-006" ?
Execution time of program is "5E-006"?
double SumOfSquare()()
{
int i;
double T3,total=0;
for(i=0;i<200;i++) {
clock_t start = clock();
int n=100,sum=0;
for(int i =1;i<=n;i++) {
sum=sum+i*i;
}
clock_t end = clock();
T3=double(end-start)/(double) CLOCKS_PER_SEC;
total=total+T3;
}
T3=total/200;
return T3;
}
int main()
{
double T3=SumOfSquare();
cout<<T3<<endl;
return 0;
}
这段代码应该返回该代码的执行时间值,而不是返回一些奇怪的输出,例如"5e-006"而不是执行时间。为什么?
5e-006
与5 * 10^-6
或0.000005
是一样的。是什么让你认为不是执行时间?
(5e-006
是用E表示的数字)
T3是双精度类型,它的值是5微秒,所以没有问题
看一下操纵符。它们用于格式化输出流,以便您可以获得更合理的结果。
5e-006只是5 * 10-6的标准指数符号,即0.000005。
正如其他人已经指出的那样,结果您得到了5微秒,这看起来至少是合理的作为时间
但是,我将以稍微不同的方式计算时间。我将为循环累积"滴答"的次数,然后将总数转换为秒:static const int iterations = 200;
clock_t total=0;
double seconds;
for(i=0;i<iterations;i++) {
clock_t start = clock();
int n=100,sum=0;
for(int i =1;i<=n;i++) {
sum=sum+i*i;
}
total += clock() - start;
}
return total/double(CLOCKS_PER_SEC*iterations);
不是每次迭代都进行浮点除法和浮点加法运算,而是每次迭代都进行整数加法运算,并在最后进行单个浮点除法运算。在低端硬件上,这可能会更快。更重要的是,它可能更准确,几乎与硬件无关——在浮点数中添加一长串小数是经常导致大量精度损失的情况之一。
显而易见的答案是您的代码只需要5微秒来执行。可能是因为您从不使用sum
,所以编译器将消除用于修改其值(和)的任何代码因此是内循环)。最重要的是你的测量可能是由clock
的粒度决定的。你也我想在尽可能长的一段时间内测量,我会的如果对clock
的两次调用是每次少于5分钟(当然,我会用很多)更短的时间间隔调试程序:-))。我的解决方案(我并不是说它是完美的)通常是把要在虚函数、派生类、基类中的函数什么都不做如:
class Base
{
static int ourCount;
static double ourTare;
virtual void doRun();
public:
double run();
static void setCount( int count );
};
int Base::ourCount = 0;
double Base::ourTare = 0.0;
void Base::doRun() {}
double Base::run()
{
clock_t start = clock();
for ( int count = ourCount; count > 0; -- count )
doRun();
clock_t end = clock();
return (static_cast<double>(end - start) / CLOCKS_PER_SEC - ourTare;
}
void Base::setCount( int count )
{
ourCount = count;
ourTare = 0.0;
// The following has been sufficient in the past. If the
// compiler inlines Base::run, however, it could be
// insufficent. (In my own code, Base::run is in a
// separate translation unit.)`
ourTare = Base().run();
}
class Derived
{
int d;
virtual void doRun();
public:
};
void Derived::doRun()
{
int sum = 0;
for ( int i = 1; i <= 100; ++ i ) {
sum += i * i;
}
d = sum;
}
然后调用Base::setCount
和计数(用于某些东西)这么简单,任何少于一百万的东西都是(无用),创建一个派生的实例,并在其上调用run
获取以秒为单位的总时间。你可以把它除以如果您想要每次迭代的时间,请计数。
(一个更轻率的答案是程序输出"5e-006"
,因为编译器坏了。这不是法律
- 简单C++"Hello World"程序的执行时间长
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 为什么切换 for 循环的顺序会显著改变执行时间?
- cmd.exe与Powershell中C++程序的不同执行时间
- pthread执行时间比顺序执行时间差
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 我需要帮助来缩短检索 SSL 证书的执行时间
- 如何测量cudaMalloc执行时间
- c++中的执行时间和检查流状态
- 为什么for循环中的异步不能提高执行时间
- 为什么 C++ openMP 程序执行时间更长
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 需要减少我的C++代码的执行时间
- 如何在 ubuntu 上的 php 脚本中获取程序(c,c++,java,python,php)的执行时间和内存使用量?
- 在Qt中设置pixmap时的执行时间很奇怪
- 异步控制线程执行时间
- 如何对 g++ 设置执行时间限制?
- 测量 std::系统的实际执行时间(以 C++ 为单位)
- 程序的执行时间为"5E-006" ?