繁体   English   中英

代表time_t之间的差异

[英]Representing the difference between time_t

为什么difftime( time_t t1, time_t t2)方法返回的两个time_t之间的区别为double 我没有看到精度要求来自哪里。

因为time_t在标准中简单地定义为arithmetic type capable of representing timesarithmetic type capable of representing times

这就是关于它的所有内容。 它不必是整数,也不必表示秒。 它只能是十的倍数,或者它可能是一个浮点类型,能够表示分辨率为10-43秒的时间。

C99 7.23.1 Components of time的引用是(略有释义):

声明的类型是clock_ttime_t ,它们是能够表示时间的算术类型。 clock_t和time_t中可表示的时间范围和精度是实现定义的。

因此盲目地计算时差的人:

delta = time_end - time_begin;

可能会发现他们的代码不适用于所有平台。

现在我不知道把我的头顶部的任何平台的地方不是从纪元简单秒,但我已经通过假设在此之前被咬伤,比如假设A通过Z是连续的,而事实上,这是对于使用EBCDIC的大型机产品,不需要,也不能很好地工作。 并且,是的,尽管自60年代以来显然已经死亡,它们仍然处于大量使用状态:-)

C99理由文件有这样的说法:

类型clock_ttime_t是算术的,因为根据现有的实践,这些类型的值必须与-1(“不知道”指示)进行比较,适当地进行比较。

但是,标准没有定义这些类型的算术属性,以便允许实现在选择最适合其预期应用的范围,精度和表示方面具有最大的灵活性。 表示不必是某个基本单位的计数; 可以想象,实现可以将时间值的不同分量表示为整数类型的子字段。

尽管普遍认为 - 并且实现 - 作为表示自某个时期开始以来的秒的整数类型,但是time_t实际上并未正式定义,因此如果它是time_t则无法使用difftime的结果。 至于其他选择:在某些情况下int (因为很longlong long而且long long不可移植。

可能是因为它是最通用的算术类型。 如果底层time_t支持它,它允许优于第二精度。

原因是没有为time_t类型定义算术运算,通过返回double意味着您可以在计算中使用结果。

Iow如果你将两个time_t值相互添加,你处于不安全的区域,因为如果time_t被定义为unsigned int或普通int,则可能导致不同的行为 - 具体取决于你的平台。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM