/ / znajdowanie sześciennego korzenia przy użyciu delta i epsilon w Pythonie - python, python-3.x

znajdowanie cubed root przy użyciu delta i epsilon w Pythonie - python, python-3.x

Próbuję napisać program, który znajdzie kostkę w kostce za pomocą delta i epsilon, ale utknąłem, ponieważ nie mogę zrozumieć, dlaczego mój program działa w nieskończonej pętli

    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)

Odpowiedzi:

2 dla odpowiedzi № 1

Pierwszą rzeczą, której powinieneś użyć if/elif zamiast oddzielnych if Bloki.

Rozważ następujące: gdy guess**3 > num jest True, aktualizujesz guess zmniejszając jego wartość, aby tak się stało guess**3 < num (następny, jeśli warunek) stanie się True ponownie, co odwraca początkową aktualizację. Podsumowując, wartość guess nigdy nie zmienia się w tej pętli, a pętla wiruje w nieskończoność.

Po drugie chcesz uregulować delta wartość (karać), ponieważ może być niepokojąco duża, jak wartość num wzrasta.

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)