मैं एक प्रोग्राम लिखने की कोशिश कर रहा हूं जो डेल्टा और एप्सिलॉन का उपयोग करके क्यूबेड रूट पाता है लेकिन मैं "अटक" रहा हूं क्योंकि मैं यह पता नहीं लगा सकता हूं कि मेरा प्रोग्राम एक अनंत लूप में क्यों चलता है
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)
उत्तर:
जवाब के लिए 2 № 1पहली बात, आपको उपयोग करना चाहिए if/elif
अलग के बजाय if
ब्लॉक।
निम्नलिखित को धयान मे रखते हुए: कब guess**3 > num
है True
, आप अपडेट करें guess
इसके मूल्य को कम करके ताकि guess**3 < num
(अगली अगर हालत) बन जाता है 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)