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 № 1Pierwszą 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)