将time_t转换为double再转回去

3
我需要将time_t值转换为double,然后再转换回来:double转换为time_t

在哪些情况下我可能会在转换过程中丢失数据?


1
你的 time_t 的底层类型是什么?根据标准,它是未指定的。 - NathanOliver
可能是 https://dev59.com/G3I-5IYBdhLWcg3wc3-w 的重复问题。 - Rene
1个回答

5
…将time_t值转换为double,然后再转回来…在哪些情况下可能会丢失数据?
在一些情况下,不会有任何问题。time_t是某个实数类型。C11 §7.27.1 3 整型和实浮点型统称为实数类型。C11 §6.2.5 17
因此,如果time_tdouble相同,则不应该在转换时出现任何损失。 time_t通常表示为32位或64位整数。典型的double可以准确编码所有53位无符号值(或54位带符号整数值),因此当time_t为32位整数时,不应发生转换损失。当time_t为64位整数时,转换为double开始产生四舍五入误差,其大小超过了2^53。
如果double的值来自原始的time_t,则第二次转换不应该造成任何损失,但如果尝试将任意double更改为整数,则可能导致未定义的行为。
较少见的情况是,time_t可能是floatlong doublelong long等,类似的问题也会出现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接