这个问题已经有了一个答案:
对于简单的计算,如
1-0.92*0.9
我的ipython 3给出了结果
0.17199999999999993
而不是0.172
?
发布于 2018-06-11 17:33:06
IPython使用64位浮点算术。不幸的是,浮点算术实际上是二进制的,内部用1和0表示。
浮点算法不可能确定像这样简单的事情0.9
或0.92
没错,这意味着你仍然存在舍入错误。这是重复/循环小数的二进制等价物
事实上,浮点算法只能精确地表达一些非整数。x
可以用形式表示的x = a/b
何地a,b
在最低的条件下,a, b
是整数,而且b
是1
或者是二次幂。它不能准确地表示十分之一,或任何分母b
是5的倍数,或除1或2以外的任何数字。这就像最低项分数a/b
不能精确地表示为十进制b
包含除2
和5
。
此外,你必须牢记最重要和最不重要的价值观:它们不能太遥远:1.000000000000000000000001
如果双倍的话,那么最右边的(最不重要的)1就会下降。
以下是一些例子:
b
是1,意思是100是整数。100代表了。b
是2。0.5正好代表。b
是2的幂。0.125正好代表。b
等于10,乘以5。0.9不能完全代表。b
等于50,是5的倍数。0.92也不能得到准确的代表。https://stackoverflow.com/questions/-100001662
复制相似问题