双精度浮点数运算中,整数加减0.5是否始终安全?JS场景分析
双精度浮点数中整数加减0.5的运算安全性(以JavaScript为例)
是的,对于所有能被JavaScript双精度浮点数精确表示的整数n,表达式n + 0.5 - 0.5的结果始终严格等于n。
原因主要有两点:
- 首先,
0.5是2的-1次幂,属于2的整数次幂的倒数,这类数值可以被IEEE 754双精度浮点数精确存储,不存在任何精度损失。 - 其次,双精度浮点数能精确表示所有绝对值小于2^53的整数(这是双精度的精确整数范围)。对于这类整数
n,它的二进制表示里小数部分全是0,加上0.5后,只是在二进制小数的第一位添上1,整个数值依然能被精确存储,不会出现进位导致的精度丢失。之后再减去0.5,就相当于把这个添上的小数位去掉,完美还原回原整数n。
需要注意的是:如果整数n的绝对值≥2^53,这类整数本身就无法被双精度浮点数精确存储(JS里会自动转为近似值),此时讨论这个表达式的结果是否等于n就没有实际意义了,因为n在JS中已经不是它原本的精确值。
内容的提问来源于stack exchange,提问作者user6118986
相关产品推荐
相关产品推荐

