c++ - 有趣的处理时间结果

标签 c++ runtime

我制作了一个小型应用程序,可以对 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/

相关文章:

c# - 在 C# 中生成运行时代码(结构、类)

css - 在运行时加载 css 是一半失败/一半成功

c++ - 在 C++ 中可以使用哪些其他有用的类型转换

c++ - 当我们在模板声明中看到 class C = myarray 时,这意味着什么?

c++ - 引用指针

java - 如何在新进程中执行Jar文件并关闭原来的Jar?

VBA:多个动态添加按钮的事件

c++ - 如何查明是否未设置环境变量?

c++ - 打印任何 STL 容器

java - 从 Java 运行 AWK 创建文件并使用 BufferedReader 读取它