关于计算程序运行时间

vegetablebirdck 2011-09-28 01:25:02
为什么运行时间总是为0呢?到底哪里出错了呢?请大家指教。
#include <iostream>
#include <ctime>
using namespace std;

int main()
{
int a[100000];
long start=clock(),end(0);

for(int i=0;i<100000;i++)
a[i]=i;

for(int i=0;i<100000;i++)
sum+=a[i];
end=clock();

long result=(end-start)/1000;
cout<<"The time was: "<<result<<endl;

system("pause");

return 0;

}
...全文
81 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hondely 2011-09-29
  • 打赏
  • 举报
回复
精度不够
vegetablebirdck 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mscf 的回复:]
别除1000,要么就除1000F并且直接不赋值打印double值
[/Quote]


1000F?不行啊
vegetablebirdck 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yxriyin 的回复:]
时间太短了吧,end-strat<1000
你用double result = (end-start)*1.0/1000试试
[/Quote]

试过了,不行啊
pathuang68 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 vegetablebirdck 的回复:]
为什么运行时间总是为0呢?到底哪里出错了呢?请大家指教。
C/C++ code
#include <iostream>
#include <ctime>
using namespace std;

int main()
{
int a[100000];
long start=clock(),end(0);

for(int i=0;i<100000;i++)
……
[/Quote]

原因:
1. 这样的计算量对C++而言太小菜了,很快就算完了,建议在两个循环外面再加一层到两层循环。
2. long result=(end-start)/1000;就不要再除以1000变成秒了,直接用毫秒不是挺好的嘛,就算end-start不是零,但由于计算量太少,因此肯定会小于1000的,比如2ms,你再除以1000,也就变成0了。
wulj_0614 2011-09-28
  • 打赏
  • 举报
回复
别用clock,计算精确时间应该用QueryPerformanceFrequency和QueryPerformanceCounter。

#include <iostream>
#include <Windows.h>
using namespace std;

int main()
{
int a[100000];
int sum = 0;

LARGE_INTEGER fr;
QueryPerformanceFrequency(&fr);
LARGE_INTEGER t1, t2;
QueryPerformanceCounter(&t1);
for(int i=0;i<100000;i++)
a[i]=i;

for(int i=0;i<100000;i++)
sum+=a[i];
QueryPerformanceCounter(&t2);

long result = static_cast<long>((t2.QuadPart - t1.QuadPart) * 1000000 / fr.QuadPart);
cout<<"The time was: "<<result<<"us"<<endl;

system("pause");

return 0;

}

一叶之舟 2011-09-28
  • 打赏
  • 举报
回复
别除1000,或是用更高精度的计时器,精确到微秒或纳秒。
薛定谔之死猫 2011-09-28
  • 打赏
  • 举报
回复
别除1000,要么就除1000F并且直接不赋值打印double值
龙哥依旧 2011-09-28
  • 打赏
  • 举报
回复
// crt_clock.c
// This example prompts for how long
// the program is to run and then continuously
// displays the elapsed time for that period.
//

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

void sleep( clock_t wait );

int main( void )
{
long i = 6000000L;
clock_t start, finish;
double duration;

// Delay for a specified time.
printf( "Delay for three seconds\n" );
sleep( (clock_t)3 * CLOCKS_PER_SEC );
printf( "Done!\n" );

// Measure the duration of an event.
printf( "Time to do %ld empty loops is ", i );
start = clock();
while( i-- )
;
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "%2.1f seconds\n", duration );
}

// Pauses for a specified number of milliseconds.
void sleep( clock_t wait )
{
clock_t goal;
goal = wait + clock();
while( goal > clock() )
;
}

Delay for three seconds
Done!
Time to do 6000000 empty loops is 0.1 seconds
yxriyin 2011-09-28
  • 打赏
  • 举报
回复
时间太短了吧,end-strat<1000
你用double result = (end-start)*1.0/1000试试
课程内容:本课程是《Java工程师必学系列课程》的第6部分,主要讲解Java语言中中新旧两代日期时间相关的类、日期时间相关的处理方法、历法和时间计算的常识,在课程的最后还安排了万年历实战项目本课程涉及的主要内容可以分为四部分:一、Java语言旧日期时间系统二、Java8新日期时间系统三、日期、时间、历法基础知识四、万年历项目课程说明:在开发Java程序的过程中,无论做什么类型的项目,基本上都会处理与日期和时间相关的问题。既然日期时间问题的处理已经成了程序必须要掌握的技能,那我们就必须认真深入的学习日期时间的计算和处理方法。本课程将深入讲解Java语言新旧两代日期时间系统的相关知识。在讲解的过程中,不仅仅讲解如何调用各种类所提供的方法去处理相关问题,更是从原理上深入分析了这些类的设计原理,以及要如何避免在实战中踩到那些非常隐蔽的大坑。此外,除了讲解日期时间相关工具类的使用,本课程还向广大学员普及了一些必要的日期、时间和历法的相关知识。让学员能够从根本上理解日期时间算法的设计思路。同时,本课程在最后一部分,安排了非常精彩的、完整的万年历项目,通过实战的形式切实帮助学员提高解决具体问题的能力!预期效果:认真学习完本课程,学员可以掌握日期时间计算和处理的相关知识,并能提高实际的编码水平。配套福利:万年历软件的完整源码环境配置要求:学习本课程需安装JDK13或更高版本的JDK,以便程序能正确运行,建议使用IntelliJ IDEA 2019.1.2或更高版本的开发工具。因有合作协议约束,《穆哥学堂》只提供PDF版本的课件!

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧