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 有一个十进制库,可以让你评估这个为真(同时也解释了为什么它是假的),事实上,他们使用几乎完全相同的例子: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,即操作的精度。