Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用穷举枚举逼近平方根的更好方法?_Python_Python 3.x - Fatal编程技术网

Python 使用穷举枚举逼近平方根的更好方法?

Python 使用穷举枚举逼近平方根的更好方法?,python,python-3.x,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: prin

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

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
x=25
ε=0.001
步长=ε**2
数值=0
ans=0.0
而abs(ans**2-x)>ε和ans=ε:
打印“在数字的平方根上失败”,x
其他:
打印ans,'接近,'x的平方根
对于大于1的数字

如何使用该方法

如果关于如何计算平方根的问题较多,可以考虑二进制搜索。这种二进制搜索可以使用两个阶段:

  • 寻找上限的阶段;及
  • 使用二进制搜索确定精确值的阶段
或者,在许多情况下,在电气工程练习中使用的一种众所周知的算法是牛顿法,您可以使用收敛序列:

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
是最好的选择,因为它是在浮点协处理器(因此是硬件)上处理的。如果您需要更精确地确定平方根,您可以定义自己的浮点并实现其中一种方法。但是,对于许多应用程序,默认的浮点及其操作就足够了。

问题是什么?这不是python 3代码。为什么你要费心用python来做这件事,而不仅仅是求平方根?@Eevee他可能需要从头开始构建平方根,这在数学上仍然是一个悬而未决的问题,如果你问任何数学程序员如何找到一个数的平方根,你可能有不同的选择。但他仍然需要给出清晰的问题,这样我们就可以在这个清晰的答案上添加一个与作者所指的不同方法的链接,看看:牛顿的方法是二次收敛的,所以20次迭代甚至可能有点过多。@DietrichEpp:我同意,修改为
5
。但我认为最好还是使用浮点sqrt。只有在需要极高精度时,才可以使用自定义算法,但在这种情况下,应首先设计精度更高的浮点。