Ric*_*h C 0 floating-point matlab
在MATLAB中,以下是正确的
0.1 * 10.0 == 1
Run Code Online (Sandbox Code Playgroud)
但是0.1并没有完全用浮点表示,所以我预计它不是真的.我是否幸运,错误恰好小于eps,所以它被舍入为1?
MATLAB实现了IEEE 754,所以我认为它应该适用于所有语言.但这篇文章让我觉得它可能是MATLAB特有的东西.
您的具体示例适用于使用IEEE754浮点运算的任何语言(至少64位).
文字0.1是完全正确的
0.1000000000000000055511151231257827021181583404541015625
Run Code Online (Sandbox Code Playgroud)
10.0 正好是10
因此他们的产品
1.000000000000000055511151231257827021181583404541015625
Run Code Online (Sandbox Code Playgroud)
两个最接近的浮点值是:
1.0
1.000000000000000222044604925031308084726333618164062
Run Code Online (Sandbox Code Playgroud)
其中第一个是最接近的,所以结果四舍五入到那个.
(我不是100%肯定你链接到的那个例子中发生了什么:我怀疑它与使用更高中间精度的 C#有关)
但总的来说,这种事情并非如此.例如0.51255*1e5,不是51255(虽然MATLAB可能在打印时撒谎,试试0.51255*1e5-51255).