表示时间_t之间的差异
Representing the difference between time_t
为什么difftime( time_t t1, time_t t2)
方法返回的两个time_t
之间的差异是double
?我不知道精度要求是从哪里来的。
因为time_t
在标准中被简单地定义为arithmetic type capable of representing times
。
这就是它的全部内容。它不一定是整数,也不一定代表秒。它只能是10的倍数,也可以是一种浮点类型,能够代表10-43秒的分辨率。
C99 7.23.1 Components of time
的引文是(稍微转述一下):
声明的类型为
clock_t
和time_t
,它们是能够表示时间的算术类型。clock_t和time_t中可表示的时间的范围和精度是实现定义的。
因此,人们盲目地计算时差:
delta = time_end - time_begin;
可能会发现他们的代码并不适用于所有平台。
现在,我根本不知道有哪个平台从新纪元开始就不是一个简单的秒,但我以前曾被类似的假设所困扰,比如假设A
到Z
是连续的,而事实上,这不是必需的,在使用EBCDIC的大型机产品上也不太好用。而且,是的,尽管自60年代以来就已经死亡,但它们仍在大量使用:-)
C99的基本原理文件是这样说的:
类型
clock_t
和time_t
是算术的,因为根据现有实践,这些类型的值有时必须与-1("不要立即"指示)进行比较,并进行适当的转换。然而,本标准没有定义这些类型的算术属性,以便实现在选择最适合其预期应用的范围、精度和表示形式方面的最大灵活性。表示不需要是某个基本单位的计数;一个实现可以将时间值的不同组成部分表示为整数类型的子字段。
尽管time_t
被普遍认为并实现为表示某个纪元开始以来的秒数的积分类型,但它实际上并没有被正式定义为这样的类型,因此如果它是time_t
,则无法方便地使用difftime的结果。至于其他选择:int
在某些情况下太小(long
也是如此),long long
不可移植。
可能是因为它是最通用的算术类型。如果底层time_t
支持它,它可以提供比秒更好的精度。
原因是没有为类型time_t
定义算术运算,通过返回双精度意味着您可以在计算中使用结果。
IOW如果您将两个time_t
值彼此相加,则您处于不安全区域,因为如果time_t被定义为无符号int或正常int,则可能会产生不同的行为,具体取决于您的平台。
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 以天C++为单位的两个时间戳之间的差异
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 如何获取两个时间点之间的时间
- ESP32_BLE_Arduino库中的扫描窗口、间隔和扫描时间之间有什么区别
- 有序地图字符串搜索与整数搜索之间的时间复杂度
- 连续光线投射之间的时间延迟
- 如何找到纪元时间戳和 std::chrono::system_clock::now 之间的时差(以毫秒为单位)
- 对于同一任务,线程的等待时间在 0 到 30000 微秒之间系统地切换
- 避免在统计数据和重命名之间进行TOCTOU(检查时间,使用时间)
- switch 语句结束和下一条语句之间的时间是否具有确定性(与路径无关)
- 使用 c++ 获取两个日期与时间字符串之间的差异(以秒为单位)
- 结构成员的地址作为编译时间常数之间的差异
- 均衡符号和初始化之间的时间和空间复杂性是否存在差异
- 如何使用C ++在微秒和纳秒中获取两个时间间隔之间的差异
- sTD :: Chrono Clocks之间的播放时间_points
- 为什么这两个代码之间的运行时间差异这么长