Numeri macchina e operazioni sbagliate

di il
2 risposte

Numeri macchina e operazioni sbagliate

Ho scritto questo codice che dato un numero x ritorna il suo sviluppo in frazione continua fino al termine l-esimo:
def fraz_cont(x,l):
    if(x>0):
        L=[int(x)]
    else:
        L=[int(x)-1]
        x=x-int(x)+1
    while(len(L)<l and x!=int(x)):
        x=1/(round(x-int(x),12)) 
        L.append(int(x))
    return L
Il while termina non appena la parte decimale di x diventa nulla. Il problema è che i numeri vengono approssimati al numero di macchina più vicino producendo risultati errati (ad esempio quello che dovrebbe essere 0.25 risulta essere 0.2500000003). Ho provato a troncarli con round() ma spesso non funziona. Come potrei aggiustarlo?

2 Risposte

  • Re: Numeri macchina e operazioni sbagliate

    La rappresentazione macchina dei numeri (interi e reali/floating point) e' un fatto a cui NON PUOI sottratti.
    Pero', ci sono soluzioni alternative:

    1) numeri interi macchina
    2) numeri interi con precisione arbitraria (python li supporta)
    3) numeri razionali basati su 1) e 2)

    SE vuoi 'investigare' questo universo, ci sono diverde aree che usano questi algoritmi. Ad esempio: il calcolo simbolico, la crittografia, la teoria dei numeri

    Cercati : the art of computer programming, volume 1
  • Re: Numeri macchina e operazioni sbagliate

    Nel caso del mio problema come potrei modificare l'algoritmo?
Devi accedere o registrarti per scrivere nel forum
2 risposte