当前位置: 代码迷 >> C语言 >> [求助]如何能准确求循环运行的时间(单位为秒)?
  详细解决方案

[求助]如何能准确求循环运行的时间(单位为秒)?

热度:375   发布时间:2007-09-19 22:23:29.0
[求助]如何能准确求循环运行的时间(单位为秒)?

# include<stdio.h>
# include<stdlib.h>
# include<time.h>
# define CLOCKS_PER_SEC 18.2
int main(){
int x,N;
int Num[100];
float starttime,endtime,gettime;
srand((unsigned)time(NULL));

start:

printf("\nHOW MANY DATA?\n");
scanf("%d",&N);

starttime = clock();
for(x=1;x<N;x++) {
int i=x;
Num[i]=rand();
printf("%d ",Num[i]);
}
endtime = clock();
gettime = (endtime-starttime)/CLOCKS_PER_SEC;
printf("\ntotal time :%f",gettime);
printf("\ntotal number is: %d\n",x);
goto start;
/*return 0;*/
}

为什么我得到的时间是随机的,循环相同的次数,
每次的时间都是不一样的

搜索更多相关的解决方案: 单位  运行  时间  

----------------解决方案--------------------------------------------------------
LZ可以参考下面的一程序:
#include<stdio.h>
#include<conio.h>
#include<time.h>
int main(void)
{
clock_t startTime=clock();
clock_t endTime;
clrscr();
getch();
endTime=clock();
printf("%lf",(endTime-startTime)/CLK_TCK);
getch();
}
计算从第一个clock()到第二个clock()之间的时间间隔.(单位:秒)
----------------解决方案--------------------------------------------------------

我想麻烦一下楼上换掉你的TC
其它:回楼主,可以精确到毫秒,实际精度是0.015s或者15ms
clock()的两次返回值直接相减就是以ms(毫秒)为单位
并且,得到的时间肯定有误差,即使在单任务环境下


by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/

[此贴子已经被作者于2007-9-20 12:13:48编辑过]


----------------解决方案--------------------------------------------------------
以下是引用下雨浇花在2007-9-19 22:23:29的发言:

# include<stdio.h>
# include<stdlib.h>
# include<time.h>
# define CLOCKS_PER_SEC 18.2
int main(){
int x,N;
int Num[100];
float starttime,endtime,gettime;
srand((unsigned)time(NULL));

start:

printf("\nHOW MANY DATA?\n");
scanf("%d",&N);

starttime = clock();
for(x=1;x<N;x++) {
int i=x;
Num[i]=rand();
printf("%d ",Num[i]);
}
endtime = clock();
gettime = (endtime-starttime)/CLOCKS_PER_SEC;
printf("\ntotal time :%f",gettime);
printf("\ntotal number is: %d\n",x);
goto start;
/*return 0;*/
}

为什么我得到的时间是随机的,循环相同的次数,
每次的时间都是不一样的

因为你的测试环境windows是多任务系统,请在单任务系统测试。


----------------解决方案--------------------------------------------------------
以下是引用雨中飞燕在2007-9-20 12:11:31的发言:

我想麻烦一下楼上换掉你的TC
其它:回楼主,可以精确到毫秒,实际精度是0.015s或者15ms
clock()的两次返回值直接相减就是以ms(毫秒)为单位

有时候不发言比发言更好


----------------解决方案--------------------------------------------------------
还是搞不懂,
----------------解决方案--------------------------------------------------------

也就是说,CPU在执行你的程序途中,将你的程式挂起,又去做了其它事(执行其它程式,如,你测试时打开了网络连接,这时在执行你的程式到一半时,CPU需要去处理网络数据),这样,由于做其它事的时间是不确定的,但都会加到你的计时中,造成最后的结果不确定


----------------解决方案--------------------------------------------------------

上面说的我明白,
但是
有时测出来的时间是负数,
有时测出来的时间为0.000000,即使循环次数为600甚至1000
这又是什么原因呢?


----------------解决方案--------------------------------------------------------
我正在学操作系统,和老师的意思差不多

----------------解决方案--------------------------------------------------------
以下是引用Knocker在2007-9-20 15:38:23的发言:

也就是说,CPU在执行你的程序途中,将你的程式挂起,又去做了其它事(执行其它程式,如,你测试时打开了网络连接,这时在执行你的程式到一半时,CPU需要去处理网络数据),这样,由于做其它事的时间是不确定的,但都会加到你的计时中,造成最后的结果不确定

即使是单任务一样有误差



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/
----------------解决方案--------------------------------------------------------

  相关解决方案