Python中不合逻辑的不等式,C++;,C#,F# 我在Python、C++、C++、VisualBasic、NET、ASP.NET中尝试过这个方法。p> 0.1 + 0.2 == 0.3 ==> False
这适用于我上面提到的所有语言。为什么会出现这种不合逻辑的不平等 从Python文档中阅读此内容;它几乎一字不差地适用于所有语言:Python中不合逻辑的不等式,C++;,C#,F# 我在Python、C++、C++、VisualBasic、NET、ASP.NET中尝试过这个方法。p> 0.1 + 0.2 == 0.3 ==> False,c#,c++,python,math,f#,C#,C++,Python,Math,F#,这适用于我上面提到的所有语言。为什么会出现这种不合逻辑的不平等 从Python文档中阅读此内容;它几乎一字不差地适用于所有语言: Python有一个十进制库,允许您将其计算为true(同时也解释了为什么它是false),事实上,它们使用了几乎相同的示例: 精确性一直延续到算术中。在十进制浮点中,0.1+0.1+0.1-0.3正好等于零 另一篇相关文章,“每一位计算机科学家都应该知道关于浮点的知识”,这是一篇多年前撰写的开创性文章,今天仍然适用:要比较浮点数,请使用以下模式: 0.1 + 0.2
Python有一个十进制库,允许您将其计算为true(同时也解释了为什么它是false),事实上,它们使用了几乎相同的示例: 精确性一直延续到算术中。在十进制浮点中,0.1+0.1+0.1-0.3正好等于零
另一篇相关文章,“每一位计算机科学家都应该知道关于浮点的知识”,这是一篇多年前撰写的开创性文章,今天仍然适用:要比较浮点数,请使用以下模式:
0.1 + 0.2 == 0.30000000000000004 ==> True
Math.Abs(NumberToCompare1-NumberToCompare2)<0.01
其中,0.01是ε,即运算的精度。您可能希望对此进行解读:(每一位计算机科学家都应该了解浮点运算)
简单的回答是,在二进制中,0.1是一个重复的分数,它在1/8和1/16之间的“某处”,因此没有0.1(或0.2)的“位精确”表示。在比较浮点值时,必须始终在ε值内进行比较,以防止出现此类问题。这是一个浮点问题。绑定到某个地方是重复的。正如您可能知道的,没有办法存储从0到1的所有可能的数字。您永远不应该将相等与浮点数进行比较。。。您应该始终使用AlmostEquals函数,其ε值被确定为“足够接近”@chris为什么?即使这是真的,用0.3或0.4存储0.1和0.2有什么区别?@Aidin.T,您必须了解实现细节才能知道到底有什么不同。已经有一些不错的链接发布了。F#
0.1M+0.2M=0.3M也是如此
Math.Abs(NumberToCompare1 - NumberToCompare2) < 0.01