C-度量函数时间执行
我想测量插入排序函数的弹性时间。但是,结果是0.0000000秒。我能做什么?我试过其他时间图书馆。不幸的是,它没有。。。谢谢我又写了一遍C-度量函数时间执行,c,function,time,execution,measure,C,Function,Time,Execution,Measure,我想测量插入排序函数的弹性时间。但是,结果是0.0000000秒。我能做什么?我试过其他时间图书馆。不幸的是,它没有。。。谢谢我又写了一遍 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> int main(void) { int number=1; if(number == 1) { struct timeval st
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int number=1;
if(number == 1)
{
struct timeval start, end;
gettimeofday(&start, NULL);
for(int i=0; i<5;i++)
{
insertion_sort( kelime, n );
}
gettimeofday(&end, NULL);
printf("Elapsed time is %.10f",(end.tv_sec * 1000000 + end.tv_usec)- (start.tv_sec * 1000000 + start.tv_usec));
}
#包括
#包括
#包括
#包括
内部主(空)
{
整数=1;
如果(数字==1)
{
结构timeval开始、结束;
gettimeofday(&start,NULL);
for(int i=0;itime
的粒度只有秒。而您的代码最差可能是微秒或毫秒。请使用具有微秒粒度的gettimeofday
但请注意,time
和gettimeofday
都提供了墙时间。如果需要CPU时间,可以使用clock
。您的计算和打印是:
printf("Elapsed time is %.10f",
(end.tv_sec * 1000000 + end.tv_usec) -
(start.tv_sec * 1000000 + start.tv_usec));
您正在尝试以浮点格式打印整数值;这不会带来幸福感。假设整数算术没有溢出,则可以使用:
printf("Elapsed time is %.6f",
((end.tv_sec * 1000000 + end.tv_usec) -
(start.tv_sec * 1000000 + start.tv_usec)) / 1000000.0);
这将为您提供一个浮点值,以便使用浮点格式打印。如果gettimeofday()
仅支持6位(默认为6位小数,但清晰性通常很好),则请求10位小数是没有意义的
您还可以使用:
printf("Elapsed time is %.6f",
((end.tv_sec * 1000000.0 + end.tv_usec) -
(start.tv_sec * 1000000.0 + start.tv_usec)) / 1000000);
关键是要确保在浮点运算中完成足够的计算。我尝试过。但是,我没有编写代码。我该怎么办?错误]'t0'未声明(首次在此函数中使用)[注意]对于[Error]'t1'未声明的每个函数,每个未声明的标识符只报告一次(首次在此功能中使用)显示所有代码。您没有在该代码段中声明t0
和t1
。如果这确实是您的所有代码,那么如果不是编译错误,您还希望看到什么?您需要将t0和t1声明为struct timevals。请注意,Windows没有此功能。您可以使用时钟,但对于Windows,ticker仅以64hz的频率运行,因此分辨率仅为15.625毫秒。您可以使用,但这仅限于Windows。%.10f
。字段不是浮点数,而是长点数(通常)。试试%ld
。看看rdtsc
的内在特性。@Mr.Gurbuz:试着排序5000个元素,而不是仅仅5个。或者加粗,选择50000个,甚至500000个。不要太高,否则堆栈空间可能会用完(我不确定如果你在Wijndows上,500.000个元素是否安全).基本上,对5个元素进行排序不会花费足够长的时间来注册。