我最近发现x**.5
和math.sqrt(x)
在Python中并不总是产生相同的结果:
Python 2.6.1 (r261:67517, Dec 4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)]
on win32
>>> 8885558**.5 - math.sqrt(8885558)
-4.5474735088646412e-13
检查所有小于10**7的整数,两种方法对几乎0.1%的样本产生不同的结果,对于较大的数字,误差的大小增加(缓慢)。
所以问题是,哪种方法更准确?
Tags:
两者都不准确,它们都与实际答案相等:
http://mail.python.org/pipermail/python-list/2003-November/238546.html
**更完整。
math.sqrt
可能只是sqrt的C实现,它可能与pow
有关。pow函数和math.sqrt()函数都可以计算比默认浮点类型可以存储的结果更精确的结果。我认为你看到的错误是浮点数学的局限性造成的,而不是函数的不精确性。另外,当取一个7位数的平方根时,~10^(-13)的差是什么时候的问题?即使是最精确的物理计算也很少需要很多有效数字。。。
使用math.sqrt()的另一个原因是它更容易阅读和理解,这通常是以某种方式做事的好理由。
使用
decimal
可以找到更精确的平方根:相关问题 更多 >
编程相关推荐