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) |
当我调用
在返回行打印所需结果之前添加
有人能向我解释为什么会发生这种情况,并帮助我克服这种情况,使函数返回所需的值吗?
好吧,有两件事——第一,计算机不能很好地表示某些数字(比如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)) |
我正在努力在印刷品中找到确切的参考,它如何在印刷品上称为
零比雷埃夫斯注意到:
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