【发布时间】:2026-01-25 19:25:01
【问题描述】:
我想用一个十六进制常量初始化一个双精度数。
double dbl = 0xFEDCBA9876543212;
printf("dbl: %llX\n", (uint64_t)dbl);
我希望看到输出:
dbl: FEDCBA9876543212
但我得到了:
dbl: FEDCBA9876543000
为什么会这样,为什么最后 3 个字节被丢弃?
【问题讨论】:
-
这样做可能会花费数十亿美元!看到了,去过那里...
-
作为 64 位数据类型,
double不能代表 64 位整数值的完整精度,因为它还需要为指数部分留出空间。 -
将“每个计算机科学家都应该了解的浮点知识”打入您最喜欢的搜索引擎。
-
@DavidSchwartz 如果您能在此处提供实际链接,我会很好:"what every computer scientist should know about floating point"
-
您将整数值分配给
double- 我的猜测是您实际上希望将按位等效值分配为double,在这种情况下您将需要使用reinterpret_cast正如 Zak 所建议的那样。