Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中不合逻辑的不等式,C++;,C#,F# 我在Python、C++、C++、VisualBasic、NET、ASP.NET中尝试过这个方法。p> 0.1 + 0.2 == 0.3 ==> False_C#_C++_Python_Math_F# - Fatal编程技术网

Python中不合逻辑的不等式,C++;,C#,F# 我在Python、C++、C++、VisualBasic、NET、ASP.NET中尝试过这个方法。p> 0.1 + 0.2 == 0.3 ==> False

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文档中阅读此内容;它几乎一字不差地适用于所有语言:


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