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