oco*_*mfd 5 javascript floating-point floating-accuracy
注意:我不是在问为什么0.1 + 0.2与0.3不同.
根据浮动点数学是否破碎?,0.1 + 0.2不等于0.3,因为在比较之前0.1和0.2已经四舍五入到不同的数字,这与0.3的舍入数不同.
但我的问题是,为什么0.1 + 0.2 + 0.3!= 0.3 + 0.2 + 0.1?
console.log(0.1+0.2+0.3==0.3+0.2+0.1);Run Code Online (Sandbox Code Playgroud)
我的假设:在计算机内部,浮点数将四舍五入为一个值:
0.1是圆到A.
0.2是圆到B.
0.3是圆到C.
因为舍入值是精确的(可以用二进制表示),所以我认为
A + B + C应该与C + B + A完全相等,就像1 + 2 + 3恰好等于3 + 2 + 1.但现在结果不同了.我的假设有什么问题?
因为浮点数学被破坏了。
加法是从左到右执行的(参见#13:加法)。
0.1 + 0.2 + 0.3等于(0.1 + 0.2) + 0.3结果:0.3000000000000001 + 0.3
0.3 + 0.2 + 0.1等于(0.3 + 0.2) + 0.1结果:0.5 + 0.1
所以,是的,这0.1 + 0.2与0.3
console.log( 0.1 + 0.2 + 0.3);
console.log((0.1 + 0.2) + 0.3);
console.log( 0.3 + 0.2 + 0.1);
console.log((0.3 + 0.2) + 0.1);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
893 次 |
| 最近记录: |