gpt4 book ai didi

c++ - 给定一个时间点,我如何获得自纪元以来的秒数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:11:32 25 4
gpt4 key购买 nike

我有一个来 self 正在使用的库的函数,它需要一个 double 作为参数。它需要传递一个纳秒类型的偏移量加上 sytem_clock::now()。到目前为止我有这段代码:

system_clock::time_point now = std::chrono::system_clock::now(); 
auto timepointoffset = (now + desiredOffset);

我怎样才能使它成为双倍的?

编辑:所以我需要补充一点,问题是我需要在不冒丢失数据风险的情况下进行操作。我有这段代码:

    system_clock::time_point now = std::chrono::system_clock::now(); 
auto timepointoffset = std::chrono::time_point_cast<std::chrono::nanoseconds>(now + desiredOffset);
double value = timepointoffset.time_since_epoch().count();

问题是编译器说可能会丢失数据。

最佳答案

这个程序:

#include <chrono>
#include <cmath>
#include <iostream>

int
main()
{
using namespace std::chrono;
auto tp = system_clock::now() + 0ns;
double t1 = tp.time_since_epoch().count();
double t2 = std::nextafter(t1, INFINITY);
std::cout << t2-t1 << '\n';
}

当前输出:

256

这意味着目前 double 不能准确表示自 1970-01-01 00:00:00 UTC 以来的纳秒数。 double 可以表示等于 256ns(大约四分之一微秒)的单位。

自 2006-07-14 23:58:24.606847232 以来一直如此。在此之前(有一段时间),double 可以表示 128ns 的精度。

在 2043-01-25 23:56:49.213694464 UTC,double 将开始能够表示仅 512ns 的精度。

double 只能在 1969-09-18 18:00:01 到 1970-04-15 05:59:59 的近似范围内以纳秒精度存储 system_clock::time_point

这个分析当然假设一个 IEEE 64 位 double 。

关于c++ - 给定一个时间点,我如何获得自纪元以来的秒数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33785564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com