2017-02-16 4 views
0

Я написал следующий код на Python 3.6.0 для поиска корня куба на Редактор Spyder.Ошибка переполнения для программы Python для поиска корня куба

#Finding the cube root 
    #import math 
    y=input("Enter a number whose cube root you want to find: ") 
    root=float(y) 
    #x1=math.pow(root,1/3) 
    n=input("Enter the degree of accuracy: ") 
    epsilon=float(n) 
    x1=root/3.0 
    while True: 
    if x1>root and abs(root-x1)<=epsilon: 
     break 
    else: 
     x1=1/3*(2*x1+root/(x1**2)) 
    print("The cube root is", x1) 

Однако выход показывает "ошибки, связанные с переполнением", и что "результата является большой". Тогда я ввел следующее печати заявление:

else: 
    print(x1) 
    x1=1/3*(2*x1+root/(x1**2)) 

А теперь я обнаружил, что петля работает бесконечно. Операция print показала, что правильный ответ был достигнут, но цикл никогда не прерывался.

Может ли любое тело сказать мне, какую ошибку я сделал, и как я могу избавиться от него, не изменяя формулу, чтобы найти корень куба?

+0

часть вашего заявления, если, чтобы разорвать цикл является 'x1> root'. Если 'root' был больше 1, то' x1' никогда не будет больше этого. Подумайте, следует ли, что 'root'' 8.0' ваш алгоритм должен сходиться на 'x1'' 2.0', но '2.0> 8.0' никогда не будет истинным, поэтому ваш if-statement никогда не позволит вам« разбить ». –

ответ

0

Как x1 может стать больше, чем root в вашем коде?

вторых вы можете проверить абс (x1 ** 3 -root) < = эпсилон так попробовать:

while True: 

    if abs(x1**3 - root) <= epsilon: 
     print("The cube root is", x1) 
     break 

    else: 
     x1=1/3*(2*x1+root/(x1**2)) 
Смежные вопросы