将 time_t 转换为 double 并返回

Bar*_*hLi 3 c c++

我想将time_tvalue 转换为double然后再转换回:doubletime_t

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

chu*_*ica 5

\n

...将time_t值转换为双精度,然后返回...
\n 在什么情况下我可能会在转换过程中丢失数据?

\n
\n\n

在某些情况下,什么也没有。 time_t是一些真实的类型。C11 \xc2\xa77.27.1 3
\n整数和实数浮点类型统称为实数类型。C11\xc2\xa76.2.5 17

\n\n

因此,如果time_t与 a 相同double,则转换中预计不会有损失。

\n\n

time_t通常表示为 32 或 64 位整数。 典型double可以精确编码所有 53 位无符号值(或 54 位有符号整数值),因此当time_t是 32 位整数时,不应发生转换损失。当time_t是 64 位整数时,转换开始对大小超出 2 53double的值进行舍入。

\n\n

double如果该值来自原始值,则第二次转换后退步骤不应发生任何损失time_t,但如果尝试将任意值double更改为整数,则可能会导致未定义的行为。

\n\n

不太常见的time_t可能是floatlong doublelong long等,并且存在类似的问题。

\n