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