为什么两者之间有差异 time_ts 返回的 difftime( time_t t1, time_t t2) 方法作为 double?我不明白精度要求从何而来。

有帮助吗?

解决方案

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

这就是它所说的全部内容。它不必是整数,也不必表示秒。它只能是 10 的倍数,也可能是能够表示分辨率低至 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 实际上并没有正式定义,所以如果它是一个,你就不能移植使用 difftime 的结果 time_t. 。至于其他替代方案: int 在某些情况下太小(如 long) 和 long long 不便携。

可能是因为它是最常见的算术类型。如果底层的世代属植物替代码支持它,它允许比第二精度更好。

原因是,没有为类型生成的算术运算操作,通过返回双倍它意味着您可以使用计算结果。

iow如果在彼此中添加两个生成的世代odeTagcode值,则由于Time_T被定义为无符号int或正常的INT - 取决于您的平台,因此可能会导致不同的行为。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top