【问题标题】:Why is difftime Only Returning Whole Numbers?为什么 difftime 只返回整数?
【发布时间】:2015-07-04 01:47:54
【问题描述】:

由于某种原因 difftime 只返回整数。我的代码很简单。

#include <time.h>

int main()
{
    time_t test = time(NULL);
    while (1)
    {
        std::cout << difftime(time(NULL), test) << std::endl;
    }
}

我的输出看起来像

0...
1...
2...
3...

difftime 不应该返回双精度数吗?

【问题讨论】:

  • 我认为它返回自 1970 年 1 月 1 日以来的秒数。
  • 对于 POSIX 系统上的亚秒级计时,请考虑 clock_gettime()(纳秒分辨率,现代,首选)或 gettimeofday()(微秒分辨率,不太现代,严格弃用,但在 Mac OS X 上可用,其中clock_gettime() 不是)。曾经也有 ftime()(毫秒分辨率,古老,已弃用)——来自 POSIX 2001 (2004) 手册。

标签: c++ time difftime


【解决方案1】:

函数time() 返回最接近的秒,difftime() 只返回它们的差。任何整数减去一个整数基本上都是一个整数(但它以双精度形式返回)。

顺便说一下,为了更准确的计时器:

time_t test = clock();
while (1)
{
    std::cout << float(clock() - test) / CLOCKS_PER_SEC << std::endl;
}

【讨论】:

【解决方案2】:

这与 time() 或 difftime() 无关。它纯粹是 c++ 中的 cout。

请看这里:How do I print a double value with full precision using cout?

【讨论】:

    【解决方案3】:
    int main()
    {
        time_t o_test, f_test;
        time(&o_test);
        while (1)
        {
            time(&f_test);
            std::cout << difftime(f_test, o_test) << std::endl;
        }
    }
    

    【讨论】:

    • 你没有解释你改变了什么或为什么。 time() 函数接受一个指向 time_t 参数的指针,如果指针不为空,它将把它返回的值写入指向的变量中。原始代码是完全正确的。你的修改也OK。 (就个人而言,我很少使用time(&amp;var),几乎总是使用time(0)time(NULL) 代替)。但是你没有解释为什么difftime() 的输出总是一个整数值。
    猜你喜欢
    • 2016-03-31
    • 1970-01-01
    • 2014-06-05
    • 2013-04-14
    • 2016-12-05
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多