[英]Representing the difference between time_t
为什么difftime( time_t t1, time_t t2)
方法返回的两个time_t
之间的区别为double
? 我没有看到精度要求来自哪里。
因为time_t
在标准中简单地定义为arithmetic type capable of representing times
的arithmetic type capable of representing times
。
这就是关于它的所有内容。 它不必是整数,也不必表示秒。 它只能是十的倍数,或者它可能是一个浮点类型,能够表示分辨率为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
而且long long
不可移植。
可能是因为它是最通用的算术类型。 如果底层time_t
支持它,它允许优于第二精度。
原因是没有为time_t
类型定义算术运算,通过返回double意味着您可以在计算中使用结果。
Iow如果你将两个time_t
值相互添加,你处于不安全的区域,因为如果time_t被定义为unsigned int或普通int,则可能导致不同的行为 - 具体取决于你的平台。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.