我正在尝试编写一个使用 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
block 。
考虑以下因素:
当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)
关于python - 在 Python 中使用 delta 和 epsilon 求立方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40143166/