我正试图编写一个使用delta和epsilon查找立方根的程序,但我被卡住了,因为我不明白为什么我的程序在无限循环中运行
num = 100
epsilon = 0.01
guess = num/3.0
while abs(guess**3 - num) >= epsilon:
delta = abs(guess**3 - num)/100
if guess**3 > num:
guess = (guess - delta)
if guess**3 < num:
guess = (guess + delta)
print("Guess:", guess)
首先,应该使用if/elif
而不是单独的if
块。
考虑以下内容:当guess**3 > num
为True
时,通过减小其值来更新guess
,使guess**3 < num
(下一个if条件(再次变为True
,从而反转初始更新。总之,guess
的值在该循环中从未改变,并且循环旋转到无穷大。
其次,你想正则化delta
值(惩罚它(,因为随着num
值的增加,它可能会变得惊人的大。
num = 100
epsilon = 0.01
guess = num/3.0
while abs(guess**3 - num) >= epsilon:
delta = abs(guess**3 - num)/num
if guess**3 > num:
guess = (guess - delta*epsilon**0.5)
elif guess**3 < num:
guess = (guess + delta*epsilon**0.5)
print("Guess:", guess)