Matlab的交换错误

sch*_*erm 2 python matlab ieee-754 floating-point-precision

有什么区别

.3+.3+.3+.1 == 1
Run Code Online (Sandbox Code Playgroud)

返回false,而

.3+.3+.1+.3 == 1
Run Code Online (Sandbox Code Playgroud)

返回true?这也适用于Python.

YBE*_*YBE 6

这是由浮点运算引起的.您可以使用ieee754函数查看浮点表示.

>> ieee754(.3+.3+.3+.1)

ans =

0011111111101111111111111111111111111111111111111111111111111111

>> ieee754(.3+.3+.1+.3)

ans =

0011111111110000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

  • @YBE 0.6也不具代表性.只有那些数字是完全可表示的,乘以2的幂,得到一个整数.例如,在这种意义上,0.375很好,因为,乘以8(2**3),它是3. 0.6非常糟糕,但是,因为你没有找到使其为整数的2的幂.那是因为0.6是6 /(2*5)= 3/5,你可以根据需要经常乘以2,你没有摆脱5. (2认同)