Arrotondamento variabili float

di il
4 risposte

Arrotondamento variabili float

Ciao a tutti! Sono nuova della programmazione e, quindi, anche di c/c++!
Non riesco a capire una cosa riguardante le variabili float (sto usando dev-c++ che ha 6 cifre decimali in automatico): se do un valore decimale ad una variabile float e chiedo semplicemente di stamparla a video con printf mi aggiunge o toglie in automatico uno 0.000001, ma non sempre. Ho fatto un po' di prove ma non riesco nemmeno a capire la logica di quando lo fa o quando non lo fa (per esempio 17.907 non me lo cambia e me lo stampa come 17.907000, 17.109 si me lo stampa come 17.108999) . Ovviamente se uso nel printf %.3f il numero lo visualizza corretto, ma se poi faccio delle operazioni, anche con altre variabili, ritorna lo stesso problema! Se uso le double va tutto bene. COME MAI?? Grazie mille!!

4 Risposte

  • Re: Arrotondamento variabili float

    Anche col double, per particolari valori, avresti questo "problema".

    Non dipende dal linguaggio o dal compilatore ma dalla rappresentazione del valore decimale in virgola mobile in binario.
    Sono errori di approssimazione inevitabili (potresti leggere qualche documentazione sull'argomento http://www.ce.uniroma2.it/courses/ac05/lucidi/Floating_2pp.pdf ).

    Pensa al fatto che il numero di bit è comunque limitato e quindi non tutti i valori sono esattamente rappresentabili.
    Per comprendere, anche in decimale, se vuoi rappresentare il valore 1/3 non puoi senza approssimarlo.

    Ad esempio, il valore 0,1 espresso in binario non è rappresentabile precisamente in quanto periodico.

    Se non devi fare calcoli scientifici di alta precisione, ti basta usare un double. Avrai errori molto piccoli.
  • Re: Arrotondamento variabili float

    Il problema dipende dal fatto che i numeri reali sono infiniti, mentre nei calcolatori (tutti) il numero di cifre a disposizione è limitato. Se ti interessa una trattazione completa:What Every Computer Scientist Should Know About Floating-Point Arithmetic
  • Re: Arrotondamento variabili float

    Andrea Quaglia ha scritto:


    Il problema dipende dal fatto che i numeri reali sono infiniti, mentre nei calcolatori (tutti) il numero di cifre a disposizione è limitato.
    Per la precisione, i valori reali sono infiniti in qualunque sistema di numerazione (sia il decimale che il binario); se tali valori vengono rappresentati con un numero limitato di cifre, ovviamente hai un problema. Succede con i computer (che ovviamente usano un certo numero di cifre per rappresentare tali valori) ma succede anche nella vita di tutti i giorni se fai calcoli e usi poche cifre. Ad esempio, se volessi fare un calcolo con il valore 1/1000000 usando solo 3 cifre decimali, commetterei un errore; dovrei usarne almeno 6. Addirittura per calcolare 1/3 non mi basterebbero le cifre decimali ... e facendo 1/3+1/3+1/3 otterrei "quasi" 1 ...
  • Re: Arrotondamento variabili float

    Grazie mille!
Devi accedere o registrarti per scrivere nel forum
4 risposte