浮点数值x无溢出/下溢时,x+x-x是否恒等于x?
关于浮点数运算
x+x-x与x等价性的疑问 前提说明
- 不讨论十进制值与浮点数的转换差异(这类问题聚焦十进制数转浮点数时的精度损失)
- 仅针对x是精确浮点数的场景,且只分析
x+x-x这类同值运算(而非x+y-y这类涉及不同数值的运算) - 限定条件:
x+x操作无溢出、下溢情况
核心疑问
编写公式时遇到开头为x+x-x+...的结构,若x+x无溢出/下溢,简化为x+...后结果是否完全一致?
个人推测
我认为x+x本质是将浮点数的指数部分乘以2,尾数保持不变;x+x-x则是先把指数乘2再除以2,最终结果应该和x完全相同,但不确定这个结论是否绝对成立。
测试情况
我多次运行以下JavaScript测试代码,随机生成的数值均符合预期(未触发alert):
for(var i=0;i<1000;i++){ var r=Math.random(); if(r+r-r!=r){ alert(r); break; } }
待确认点
- 浮点数减法是否存在特殊特性,导致
2*x -x的结果不等于x? x+x是否绝对等于2*x?
内容的提问来源于stack exchange,提问作者wcminipgasker2023
相关产品推荐
相关产品推荐

