x = 25
epsilon = 0.01
step = 0.1
guess = 0.0
while guess <= x:
if abs(guess**2 -x) >= epsilon:
guess += step
if abs(guess**2 - x) >= epsilon:
print('failed')
else:
print('succeeded: ' + str(guess))
我得到了这个Python程序,它试图计算一个数的平方根x
。出于某种原因,这个程序无限循环,我不知道为什么。你知道吗
只有有限多的guess
值,因为在guess>x
之后(即当guess>=25.1
时,while
循环停止)。程序中间的while
命令是唯一循环的东西,所以发生了什么?你知道吗
即使将while条件改为
<
而不是<=
,它仍然会无限循环,因为浮点不准确。你知道吗尽管您添加了0.1的步骤,
guess
值将不会精确地变为5,而是4.99999998,此时循环将继续运行而不进入if
块。你知道吗这至少是我看到的情况here
只有当条件
abs(guess**2 -x) >= epsilon
为真时才增加guess
。当guess = 5.0
时,该条件为假。此时guess
不再改变,但guess <= x
仍然是真的,您进入了一个无限循环:从
guess = 0.0
开始并以0.1
递增意味着您的循环在到达该点之前执行50次,之后guess
再也不会更改。你知道吗实际上,
guess
并不是5.0
,因为添加0.1
的近似值(不能用二进制分数精确表示)会使值稍微低一些:但这种差异仍然小于
epsilon
。你知道吗当您到达目标的
epsilon
距离内时,您可能希望打破while
循环:相关问题 更多 >
编程相关推荐