我正在尝试优化双-> 文本转换(试图击败 grissu、ryu 等......)。
在这样做的同时,我将我的结果与sprintf
输出进行比较。现在我遇到了上述有趣的案例。
printf("%.15e", 1e23);
(例如 glibc)打印
9.999999999999999e+22
而我的日常打印
1.000000000000000e+23
现在这两个数字与“真实值”的距离相同,并且将这两个值转换回来(例如 with atof
)会产生相同的双精度值。
但是,我相信我的结果满足“四舍五入”规则(这就是它采用这种方式的原因)。
哪个结果更正确?