【问题标题】:Measuring time for my array of random numbers to print is always showing 0 seconds测量我的随机数数组打印的时间总是显示 0 秒
【发布时间】:2018-06-11 15:10:04
【问题描述】:

我在这里的第一篇文章。只是想知道为什么无论我的数组中有多少随机数,我的秒表总是显示 0 秒或 0 毫秒。我非常感谢您的帮助。 这是我的代码:

#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

double clock_start()
{
    clock_t start = clock();
    return start;
}

void random_number()
{
    int array[10000];
    srand(6);
    cout << "10k Random numbers: ";
    for (int i = 0; i < 10000; i++)
    {
        array[i] = rand() % 99 + 1;
        cout << array[i] << "\n";
    }
}

int main()
{
    setlocale(LC_ALL, "");
    //-------------------------//

    random_number();
    clock_t elapsed = (clock() - clock_start()) / (CLOCKS_PER_SEC / 1000);
    cout << "Stopwatch: " << elapsed << "ms" << " or " << elapsed * 1000 << "s" << endl;

    //-------------------------//
    system("pause > nul");
    return 0;
}

【问题讨论】:

  • 您在同一个表达式中调用clock()clock_start()。它们将几乎同时执行。 clock_start() 只返回 clock()clock() - clock() 肯定会非常小...
  • clock() 将返回与 clock_start 相同的值(或者至少非常接近),因为它们是一个接一个地被调用的。
  • 在 c++ 中,未指定操作数计算顺序。您的示例可以测量负时间跨度。

标签: c++ time clock time.h


【解决方案1】:

(clock() - clock_start()) 将在眨眼间被评估。

所有clock_start() 所做的只是返回clock()。 (事实上​​,一个好的优化编译器会将clock_start()替换为clock()!)

差值几乎肯定为零。你想要类似的东西吗

clock_t start = clock();
random_number();
clock_t elapsed = (clock() - start) / (CLOCKS_PER_SEC / 1000);

改为?

【讨论】:

  • 是的,它确实有效!所以我所做的是删除clock_start() 函数。并添加:clock_t start = clock();到我的主要功能。
【解决方案2】:

感谢大家的帮助!我很惊讶这个社区的回复速度有多快。 所以我删除了clock_start() 函数。我添加了:

clock_t start = clock();

到我的主要功能。

【讨论】:

    猜你喜欢
    • 2013-10-24
    • 1970-01-01
    • 2020-01-11
    • 2020-04-19
    • 1970-01-01
    • 2023-03-17
    • 2022-01-15
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多