考虑形式为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.50000000000000000000000000000000000000000000000000000001可以在向上舍入模式中转换为0.5.
Musl的实现似乎读取了大约125*9位数,这是很多.然后它切换到"粘性"模式:
if (c!='0') x[KMAX-4] |= 1;
Run Code Online (Sandbox Code Playgroud)
最后,当用"包含两个连续IEEE 754双打的中点"替换"包含IEEE 754双"时,答案如何变化?