考虑 d1.d2d3d4d5...dnExxx 形式的十进制表示,其中 xxx 是任意指数,d1 和 dn 均非零。
是否已知最大 n 使得存在十进制表示 d1.d2d3d4d5...dnExxx 使得区间 (d1.d2d3d4d5...dnExxx, d1.d2d3d4d5...((dn)+1)Exxx) 包含 IEEE 754双?
n 至少应为 17。问题是 17 高多少。
这个数字 n 与在十进制到双精度转换中足以考虑的位数有关,例如strtod()
. 我查看了David M. Gay 实现的源代码,希望在那里找到答案。有一个对“40”的暗示,但不清楚这是一个合理的数学结果的结果,还是只是一个统计上的安全界限。此外,关于“截断”的评论听起来像是 0.50000000000000000000000000000000000000000000000000001 在向上取整模式下可能会转换为 0.5。
Musl 的实现似乎读取了大约 125*9 个数字,这是很多的。然后它切换到“粘性”模式:
if (c!='0') x[KMAX-4] |= 1;
最后,将“包含一个 IEEE 754 双精度”替换为“包含两个连续 IEEE 754 双精度的中点”时,答案有何变化?