在 JavaScript 或 Python 等编程语言中,数字通常使用 64 位 IEEE 数字类型 (binary64) 表示。对于这些数字,我们有 15 位的准确度。这意味着您可以选择一个 15 位数字,例如 1.23456789012345e100 并且可以精确表示:存在一个浮点数,恰好具有这 15 个最高有效位。在这种特殊情况下,它是数字 6355009312518497 * 2 280 。
显然,对于超出有效范围的数字,它会失败。例如,数字 1e500 太大,不能直接用标准的 64 位浮点数表示。同样,1e-500 太小,只能表示为零。
64 位浮点数的范围可以定义为从 4.94e-324 到 1.8e308 和 -1.8e308 到 -4.94e-324,加上正好 0。但是,这个范围包括次正规数,其中相对精度可以很小。例如,数字 5.00000000000000e-324 最好表示为 4.94065645841247e-324,这意味着我们的精度为零。
要使 15 位精度规则起作用,您可能会保持在正常范围内,例如,从 2.225e-308 到 1.8e308 和 -1.8e308 到 -2.225e-308。保持在正常范围内还有其他充分的理由,例如在低于正常范围内的性能差和精度低。
原文: https://lemire.me/blog/2022/04/13/floats-have-15-digit-accuracy-in-their-normal-range/