too large to convert..., czyli problem nooba. PYTHON

0

Witam,
Moja przygoda z Pythonem się dopiero rozpoczęła, próbując rozwikłać pewną zagadkę, natrafiłem na problem nie do przejścia z moja aktualną wiedzą. Oto kod :

def rates(balance,annualInterestRate):
     j=1
     minimumMonthlyPayment=10
     while(balance>0):
            teemp=balance
            for i in range(1,13):        
                 minimumMonthlyPayment*=j
                 monthlyInterestRate=annualInterestRate/12
                 teemp=(teemp-minimumMonthlyPayment)*(1+monthlyInterestRate)   
            j+=1    
      print('Lowest Payment: %d'%minimumMonthlyPayment)

Co robi kod jest mniej istotne, metoda została narzucona z góry. oto error który śni mi się po nocach :

"OverflowError: long int too large to convert to float"
            wskazujący na linie :teemp=(teemp-minimumMonthlyPayment)*(1+monthlyInterestRate) 

Bardzo dobrze rozumiem co oznacza ten błąd, lecz nie mogę znaleźć przyczyny. Prosze o pomoc.

0

Ten while nie ma wielkich szans na zakończenie, wartości będą rosły i rosły, operujesz tam częściowo na liczbach całkowitych... Popraw pętlę.

0

Tak. zauważyłem po pewnym czasie ze zapomniałem o zabiegu który by kończył pętle, już wszystko działa, lecz nadal nie rozumiem dlaczego wypluwało tego typu błąd skoro faktyczny błąd bym innej materii. a to ze czesciowo operuje na całkowitych a częściowo na zmiennoprzecinkowych chyba nie ma znaczenia(?)

0

Dostawałeś bardzo duże liczby całkowite. Typ long int nie ma ograniczenia z góry na wielkość liczby, typ float ma ograniczenie. Ograniczenie floata zależy od implementacji. Właśnie sprawdziłem u siebie.

x = float(10**308) #przechodzi
x = float(10**309) #generuje wyjątek

1 użytkowników online, w tym zalogowanych: 0, gości: 1