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