python中的平方根算法

时间:2015-05-22 11:56:09

标签: python while-loop

我在python中使用while循环执行此操作。它没有终止。

x = 2.0
ans = 0
while ans**2 != abs(x):    
    print (ans)  
    ans = ans + 0.001
    if ans**2 == abs(x):  
        print(ans)

2 个答案:

答案 0 :(得分:3)

即使这样做并不像你想要的那样:

>>> (2 ** 0.5) ** 2 == 2
False

但对于某些数字,它确实适用于非正方形:

>>> (11 ** 0.5) ** 2 == 11
True

更简单的计算甚至可能出错:

>>> 0.1 + 0.2 == 0.3
False

问题在于,通常,计算机并不能准确表示浮点数。您只能得到一个接近正确数字的数字。因此,您不应该进行精确度测试,而应该进行接近度测试(检查差异是否小于足以满足您需求的小数字)。

>>> abs((2 ** 0.5) ** 2 - 2) < 1e-10
True

答案 1 :(得分:1)

你不应该使用<uses-permission android:name="android.permission.INTERNET" /> !=运算符来比较浮点变量,因为你不可能用这样一个天真的算法击中精确的平方根。相反,您应该定义您愿意容忍的可接受错误并继续,直到您遇到的错误数小于该数字。但是,那可能还不够。由于你有一个不变的增量,你很可能会发现你永远不会接近你正在搜索的平方根,因此,需要一个额外的保护措施,以便不通过所需的结果并继续无限:

==