我制作了一个小型应用程序,可以对 1 到 1000000 之间的数字取平均值。不难看出(使用一个非常基本的代数公式)平均值是 500000.5,但这更像是一个学习 C++ 的项目,而不是其他任何项目.
无论如何,我创建了时钟变量,旨在找到应用程序运行所需的时钟步数。当我第一次运行脚本时,它说它花费了 3770000 个时钟步,但从那以后每次我运行它,它都花费了“0.0”秒......
我在底部附上了我的代码。
要么 a.) 它保存了我第一次运行它时的变量,它只是快速运行到答案...... 或 b.) 我声明时间变量的方式有问题。
无论如何...这没有意义。
如有任何帮助,我们将不胜感激。
仅供引用(我通过 Linux 计算机运行它,不确定这是否重要)
double avg (int arr[], int beg, int end)
{
int nums = end - beg + 1;
double sum = 0.0;
for(int i = beg; i <= end; i++)
{
sum += arr[i];
}
//for(int p = 0; p < nums*10000; p ++){}
return sum/nums;
}
int main (int argc, char *argv[])
{
int nums = 1000000;//atoi(argv[0]);
int myarray[nums];
double timediff;
//printf("Arg is: %d\n",argv[0]);
printf("Nums is: %d\n",nums);
clock_t begin_time = clock();
for(int i = 0; i < nums; i++)
{
myarray[i] = i+1;
}
double average = avg(myarray, 0, nums - 1);
printf("%f\n",average);
clock_t end_time = clock();
timediff = (double) difftime(end_time, begin_time);
printf("Time to Average: %f\n", timediff);
return 0;
}
最佳答案
您也在测量 I/O 操作 (printf),这取决于外部因素并且可能会影响运行时间。此外,clock() 可能没有测量如此小的任务所需的精确度 - 查看更高分辨率的函数,例如 clock_get_time()。即使这样,其他进程也可能通过产生缺页中断、占用内存BUS等方式影响运行时间。所以这种波动一点也不正常。
关于c++ - 有趣的处理时间结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17662606/