Python,C++,C#,F#中的不合逻辑的不等式

本文关键字:不合逻辑 不等式 C++ Python | 更新日期: 2023-09-27 18:35:38

0.1 + 0.2 == 0.3 ==> False

我在python,c#,c ++,F#,Visual Basic.NET,ASP.NET中尝试过这个!

0.1 + 0.2 == 0.30000000000000004 ==> True

对于我上面提到的所有语言都是如此。为什么会发生这种不合逻辑的不平等?

Python,C++,C#,F#中的不合逻辑的不等式

Python 有一个十进制库,可以让你评估这个为真(同时也解释了为什么它是假的),事实上,他们使用几乎完全相同的例子:http://docs.python.org/2/library/decimal.html

精确性延续到算术中。在十进制浮点数中,0.1 + 0.1 + 0.1 - 0.3 正好等于零

与此相关的还有"每个计算机科学家都应该知道的关于浮点的知识",这是一篇多年前写的开创性文章,今天仍然适用:http://www.fer.unizg.hr/_download/repository/paper%5B1%5D.pdf

你可能

想读一读:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html(每个计算机科学家都应该知道的关于浮点运算的知识)

简短的回答是,在二进制中,0.1 是一个重复分数,它在 1/8 和 1/16 之间的"某个地方",因此没有 0.1(或 0.2)的"位精确"表示。 在比较浮点值时,您始终必须在 epsilon 值内执行此操作,以防止此类问题。

从 Python 文档中阅读此内容;它几乎逐字适用于所有语言:

http://docs.python.org/2/tutorial/floatingpoint.html

要比较浮点数,请使用以下模式:

Math.Abs(NumberToCompare1 - NumberToCompare2) < 0.01

其中 0.01 是 Epsilon,即操作的精度。