双精度:精度之谜揭开
尽管双精度数据保留了大约 15 位小数的精度,但在处理时会出现异常带有重复小数,如 1.0/7.0。令人惊讶的是,分配了此类值的变量在内部存储了 17 位表示形式。这种差异值得探索底层机制。
IEEE 双精度值由 53 个有效位 (DBL_MANT_DIG) 组成。这相当于接近 15.95 个十进制数字。然而,实现将其舍入为 15 (DBL_DIG)。实际上,这授予了额外的十进制精度。
利用 nextafter() 函数(返回给定值最接近的可表示数字),我们可以演示精度的细微差别。对于 1.0/7.0,nextafter() 逐渐打印两个相邻的可表示值,指示大约 16 位十进制数字的精度,即使 DBL_DIG 建议 15。
结论:
双精度值的精度取决于有效位和可表示数字之间的权衡。虽然理论精度建议为 15 位小数,但由于四舍五入和 IEEE 表示的固有性质,它有时会扩展到 16 位。了解这些因素对于处理数值计算中的十进制表示至关重要。
以上是为什么双精度浮点运算有时提供 16 位小数位精度而不是 15 位?的详细内容。更多信息请关注PHP中文网其他相关文章!