使用穷举枚举来近似平方根的更好方法?

时间:2015-01-20 00:53:07

标签: python python-3.x

这是我找到的最好的方法,使用最少的处理器:

x = 25
epsilon = 0.001
step = epsilon**2
numGuesses = 0
ans = 0.0
while abs(ans**2 - x) > epsilon and ans <=x:
    ans += step
    numGuesses += 1
print 'numGuesses =', numGuesses
if abs(ans**2 - x) >= epsilon:
    print 'Failed on square root of number', x
else:
    print ans, 'is close to square root of', x

数字大于1

1 个答案:

答案 0 :(得分:2)

如何使用math.sqrt方法。

如果这是一个关于如何通过算法计算平方根的问题,您可以考虑二进制搜索。这种二元搜索可以使用两个阶段:

  • 找到上限的阶段;和
  • 使用二进制搜索确定确切值的阶段

或者在电子工程练习中使用的众所周知的算法是牛顿方法,你可以使用收敛序列:

x(i+1) = 0.5*[x(i)+y/x(i)]

在python中,您可以将其实现为:

x = 25
numGuesses = 0
ans = 1.0
for i in range(0, 5):
    ans = 0.5*(ans+x/ans)
    numGuesses += 1

其中5是任意数,以收敛到足够的精度。

但出于性能原因,math.sqrt是最佳选择,因为它是在浮点协处理器(即硬件)上处理的。如果您需要更准确地确定平方根,可以定义自己的浮点并实现其中一种方法。但是,对于许多应用程序,默认浮点及其操作就足够了。