Python:错误地返回浮点数

Python: Returning Floats Incorrectly

我有一个python函数,如下所示:

1
2
3
4
5
6
def point_double((xp,yp)):
    s = (3.0 * pow(xp,2) - 1)/(2.0*yp) # s = 2.6
    xr = pow(s,2) - (2 * xp) # xr = 0.76
    yr = s * (xp - xr) - yp # yr = 0.824

    return (xr,yr)

当我调用point_double((3,5))时,得到的是(0.7600000000000007, 0.8239999999999981)的返回值,而不是(0.76,0.824)的正确值。

在返回行打印所需结果之前添加print xr, yr,但将其更改为print (xr,yr)会打印不正确的值。

有人能向我解释为什么会发生这种情况,并帮助我克服这种情况,使函数返回所需的值吗?


好吧,有两件事——第一,计算机不能很好地表示某些数字(比如1/3),第二,它是如何"打印"操作代码的:

所以:

1
2
3
4
5
6
xr, yr = point_double((3,5))

print xr
print yr

print (xr,yr)

这将产生:

1
2
3
0.76
0.824
(0.7600000000000007, 0.8239999999999981)

您应该考虑打印以下内容:

1
print (" x: %s y: %s" % (xr, yr))

我正在努力在印刷品中找到确切的参考,它如何在印刷品上称为str(),因为在2.7版中,它是一个内置的。通过使用%或string.format,可以有效地强制和控制如何呈现浮点。

零比雷埃夫斯注意到:

When you print an object, its str() method is called. The
str() method for a tuple (or any other inbuilt collection) calls repr() for each item in the collection.

请注意,xr的实际值是较长的、不准确的值。

编辑:这是一个很好的指南(对于python 3)关于如何存储浮点和其他打印浮点的方法https://docs.python.org/3/tutorial/floatingpoint.html