mix*_*mix 1 python printing equivalent
在下面的代码中,如果x0 == x1和y0 == y1,那么它应该告诉我.在我正在使用的例子中,它们是.但是,Python只是说x值相等,而不是y.
这是代码:
print "arc2x0 = ", arc2x0, ", arc2x1 = ", arc2x1
print "arc2y0 = ", arc2y0, ", arc2y1 = ", arc2y1
if arc2x0 == arc2x1:
print "x0 == x1"
else:
print "x0 != x1"
if arc2y0 == arc2y1:
print "y0 == y1"
else:
print "y0 != y1"
Run Code Online (Sandbox Code Playgroud)
这是输出:
arc2x0 = 5 , arc2x1 = 5.0
arc2y0 = -4.16026900507 , arc2y1 = -4.16026900507
x0 == x1
y0 != y1
Run Code Online (Sandbox Code Playgroud)
知道为什么y值测试相同吗?这些值以相同的方式计算.也许除了我所看到的不平等之外还有更多的精确度?有关如何调试此精度或任何其他想法的任何方法?
是的,除了你所看到的更精确之外.问题是==运算符通常不应该与浮点数一起使用.浮点数具有有限的精度并且累积舍入误差,并且由于不能精确地存储所有十进制值而不精确.例如
>>> print '%.18f' % 0.1
0.100000000000000006
>>> 0.4 - 0.3 == 0.1
False
Run Code Online (Sandbox Code Playgroud)
比较浮点数是否相等的最佳方法是比较它们是否几乎相等:
def nearly_equal(x, y, epsilon=1e-7):
return abs(x - y) < epsilon
Run Code Online (Sandbox Code Playgroud)
通过比较浮点数之间的差异是否小于epsilon值,这表示认为接近等于接近的接近程度.
您始终可以使用decimal.Decimal类型来避免这些问题.
归档时间: |
|
查看次数: |
392 次 |
最近记录: |