我想将time_t
值转换为double
,然后返回:double
转换为time_t
。
在什么情况下我可能会在转换中丢失数据?
答案 0 :(得分:3)
...将
time_t
值转换为double,然后返回...
在什么情况下我可能会在转换中丢失数据?
在某些情况下,没有。 time_t
是一些真实类型。 C11§7.27.13
整数和实数浮点类型统称为实数类型。 C11§6.2.517
因此,如果time_t
与double
相同,则转换中不会有任何损失。
time_t
通常表示为32位或64位整数。 Typical double
可以精确编码所有53位无符号值(或54位有符号整数值),因此当time_t
为32位整数时,不应发生转换丢失。当time_t
是一个64位整数时,转换为double
开始产生四舍五入超过2 53 的值。
如果double
值来自原始time_t
,则第二次转换返回步骤不应发生任何损失,但如果尝试将任意double
更改为“time_t
,则可能会导致未定义的行为一个整数。
不太常见,float
可以是long double
,long long
,patsubst
等,并且类似的问题也适用。