首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得high_resolution_clock的精度?

如何获得high_resolution_clock的精度?
EN

Stack Overflow用户
提问于 2011-12-05 13:35:33
回答 3查看 22K关注 0票数 26

C++11定义了high_resolution_clock,它有成员类型periodrep。但是我不知道如何才能得到那个时钟的精度

或者,如果我不能达到这个精度,至少可以以纳秒为单位来计算之间的最小可表示时间吗?可能使用period

代码语言:javascript
复制
#include <iostream>
#include <chrono>
void printPrec() {
    std::chrono::high_resolution_clock::rep x = 1;
    // this is not the correct way to initialize 'period':
    //high_resolution_clock::period y = 1;

    std::cout << "The smallest period is "
              << /* what to do with 'x' or 'y' here? */
              << " nanos\n";
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-05 13:56:16

最小可表示的持续时间是high_resolution_clock::period::num / high_resolution_clock::period::den秒。你可以这样打印:

代码语言:javascript
复制
std::cout << (double) std::chrono::high_resolution_clock::period::num
             / std::chrono::high_resolution_clock::period::den;

为什么会这样呢?时钟的::period成员被定义为“时钟的滴答周期(以秒为单位)”。它是std::ratio的一个专门化,它是一个在编译时表示比率的模板.它提供两个积分常数:numden,一个分数的分子和分母。

票数 31
EN

Stack Overflow用户

发布于 2011-12-05 14:50:58

我对R.MartinhoFernandes的回答投了赞成票,因为我认为它对这个问题提供了最清晰、最直接的答案。不过,我想添加一些代码,这些代码显示了更多的<chrono>功能,并解决了OP问题的这一部分:

,我可以至少以纳秒为单位,计算出滴答之间最小可表示的时间长度吗?

把这么多信息写进评论里是不切实际的。但除此之外,我认为这个答案是对R.Martinho Fernandes的回答的支持。

首先是代码,然后是解释:

代码语言:javascript
复制
#include <iostream>
#include <chrono>

template <class Clock>
void
display_precision()
{
    typedef std::chrono::duration<double, std::nano> NS;
    NS ns = typename Clock::duration(1);
    std::cout << ns.count() << " ns\n";
}

int main()
{
    display_precision<std::chrono::high_resolution_clock>();
    display_precision<std::chrono::system_clock>();
}

首先,我创建了一个nanosecond,它使用double作为表示(NS)。我使用double,以防万一我需要显示纳秒的分数(例如0.5 ns)。

接下来,每个时钟都有一个名为duration的嵌套类型。这是一个chrono::duration,它将具有相同的std::ratio,因此也就是R. Martinho Fernandes的答案中指出的numden。其中的一个duration,转换为NS,将给我们多少纳秒在一个时钟滴答Clock。可以使用duration成员函数从count()中提取该值。

对我来说,这个程序打印出来:

代码语言:javascript
复制
1 ns
1000 ns
票数 25
EN

Stack Overflow用户

发布于 2011-12-05 13:43:27

表示时钟滴答周期的std::ratio类型,以命名空间std::chrono中的seconds.Defined表示。

代码语言:javascript
复制
template<intmax_t Num, intmax_t Denom = 1 > class ratio;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8386128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档