擅长:python、mysql、java
<p>您使用的是<code>float</code>s。<code>float</code>数学在精度方面有缺陷-您的增量可能太小,无法正常工作,并且您的解决方案在值之间翻转,而从未达到<code>while</code>条件限制。请参阅<a href="https://stackoverflow.com/questions/588004/is-floating-point-math-broken">Is floating point math broken?</a>了解有关为什么float有时会“中断”的更多推理。你知道吗</p>
<p>您也可以将其限制为一定的重复次数:</p>
<pre><code>num = 100
high = num
low = 0
icount = 0
maxcount = 100000
cuberoot = (high + low)/2 #cuberoot of num
deltanum = 0.00000000000001
while abs(cuberoot**3 - num)>=deltanum:
icount+=1
print(icount)
if cuberoot**3 > num:
high = cuberoot
elif cuberoot**3 < num:
low = cuberoot
else:
break
cuberoot = (high + low)/2
if icount > maxcount:
print("Unstable solution reached after ",maxcount, "tries")
break
print("Cube root: " + str(cuberoot) + " yields " + str(cuberoot**3))
print("Number of iterations: " + str(icount))
</code></pre>
<p>输出:</p>
<pre><code>Unstable solution reached after 100000 tries
Cube root: 4.641588833612779 yields 100.00000000000003
Number of iterations: 100001
</code></pre>