代表time_t之间的差异

时间:2012-03-15 11:47:44

标签: c++ time-t

为什么time_t方法返回的两个difftime( time_t t1, time_t t2)之间的差异为double?我不知道精度要求来自哪里。

4 个答案:

答案 0 :(得分:2)

因为time_t只是在标准中定义为arithmetic 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;

可能会发现他们的代码无法在所有平台上运行。

现在我不知道任何平台,自从纪元以来它不是一个简单的秒,但我之前被假设喜欢这样做,例如假设{{ 1}}到A是连续的,而事实上,这不是必需的,并且在使用EBCDIC的大型机产品上不能很好地工作。并且,是的,他们在中使用still尽管显然自60年代以来一直在死亡: - )

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

  

类型Zclock_t是算术运算,因为根据现有惯例,这些类型的值必须与-1(“不知道”指示)进行比较,适当演员。

     

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这样做的原因是没有为类型time_t定义算术运算,通过返回一个双重意味着你可以在计算中使用结果。

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