为什么0.1 * 10.0 == 1

时间:2015-10-23 17:48:36

标签: matlab floating-point

在MATLAB中,以下是真的

0.1 * 10.0 == 1

但是0.1并没有完全用浮点表示,所以我预计它不是真的。我是否只是幸运而且错误恰好小于eps,所以它被舍入为1?

MATLAB实现IEEE 754,所以我认为它应该适用于所有语言。但是这个post让我觉得它可能是MATLAB特有的东西。

1 个答案:

答案 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)。