在Python中使用delta和epsilon查找立方根



我正试图编写一个使用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 > numTrue时,通过减小其值来更新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)

最新更新