擅长:python、mysql、java
<p>只有当条件<code>abs(guess**2 -x) >= epsilon</code>为真时才增加<code>guess</code>。当<code>guess = 5.0</code>时,该条件为假。此时<code>guess</code>不再改变,但<code>guess <= x</code>仍然是真的,您进入了一个无限循环:</p>
<pre><code>>>> x = 25
>>> epsilon = 0.01
>>> guess = 5.0
>>> abs(guess**2 - x)
0.0
>>> abs(guess**2 - x) >= epsilon
False
</code></pre>
<p>从<code>guess = 0.0</code>开始并以<code>0.1</code>递增意味着您的循环在到达该点之前执行50次,之后<code>guess</code>再也不会更改。你知道吗</p>
<p>实际上,<code>guess</code>并不是<code>5.0</code>,因为添加<code>0.1</code>的近似值(不能用二进制分数精确表示)会使值稍微低一些:</p>
<pre><code>>>> guess = 0.0
>>> for _ in range(50):
... guess += 0.1
...
>>> guess
4.999999999999998
</code></pre>
<p>但这种差异仍然小于<code>epsilon</code>。你知道吗</p>
<p>当您到达目标的<code>epsilon</code>距离内时,您可能希望打破<code>while</code>循环:</p>
<pre><code>while guess <= x:
if abs(guess**2 -x) < epsilon:
break
guess += step
</code></pre>