Visualizzazione stampabile
-
0.3-0.1=0.1999999....
Risalve a tutti Androidiani!
Sono nuovamente qua a proporvi uno dei miei strani problemi. e sinceramente non so neanche se possa stare veramente in questa sezione (non sapevo dove altro postare).
Ho quasi completato la programmazione di una semplice calcolatrice. Come da titolo, se eseguo l'operazione 0.3-0.1 ottengo come risultato 0.199999...e 0.4-0.1=0.30000000....
Qualcuno sa darmi una spiegazione del perché accade ciò? Non chiedo la risoluzione del problema, ma il perché questo accade.
Grazie in anticipo a tutti!
-
Quote:
Originariamente inviato da
cavaz
Risalve a tutti Androidiani!
Sono nuovamente qua a proporvi uno dei miei strani problemi. e sinceramente non so neanche se possa stare veramente in questa sezione (non sapevo dove altro postare).
Ho quasi completato la programmazione di una semplice calcolatrice. Come da titolo, se eseguo l'operazione 0.3-0.1 ottengo come risultato 0.199999...e 0.4-0.1=0.30000000....
Qualcuno sa darmi una spiegazione del perché accade ciò? Non chiedo la risoluzione del problema, ma il perché questo accade.
Grazie in anticipo a tutti!
Ciao,
se te ne tiene, la risposta arriva da uno standard IEEE, ed è qui: What Every Computer Scientist Should Know About Floating-Point Arithmetic
-
Quote:
Originariamente inviato da
frank17next
Anteponendo il fatto che sono abbastanza stanco, mi sembra di aver capito che il problema sorge dal fatto che lo 0.1 me lo considera in base Binaria e non Decimale; di conseguenza in base binaria non risulta essere precisamente 0.1, giusto?
-
Quote:
Originariamente inviato da
cavaz
Anteponendo il fatto che sono abbastanza stanco, mi sembra di aver capito che il problema sorge dal fatto che lo 0.1 me lo considera in base Binaria e non Decimale; di conseguenza in base binaria non risulta essere precisamente 0.1, giusto?
Direi di si... purtroppo anche io non ho molte forze a quest'ora per scansionare quel documento... cmq si, è un effetto di quel modo di gestire l'aritmetica negli elaboratori a base macchina di turing
-
Quote:
Originariamente inviato da
frank17next
Direi di si... purtroppo anche io non ho molte forze a quest'ora per scansionare quel documento... cmq si, è un effetto di quel modo di gestire l'aritmetica negli elaboratori a base macchina di turing
Si insomma, EVVIVA l'informatica! Domani proverò a chiedere al mio insegnante di informatica per vedere come risolvere (una mezza idea già la ho, ma è abbastanza rozza).
Grazie mille per le info!
-
Quote:
Originariamente inviato da
cavaz
Si insomma, EVVIVA l'informatica! Domani proverò a chiedere al mio insegnante di informatica per vedere come risolvere (una mezza idea già la ho, ma è abbastanza rozza).
Grazie mille per le info!
Ehehe... beh ma è già risolto. 0.3-0.1 = 0.199999... Applica opportunamente Math.round sul risultato
-
0.1 in binario diventa periodico, cioè un numero con infiniti decimali che però si ripetono periodicamente.
Quindi se converti 0.1 in binario e poi riconverti in decimale non ottieni daccapo 0.1 ma un numero leggermente inferiore.
L'unica soluzione è usare il massimo della precisione possibile e arrotondare il risultato.
-
Ho visto adesso le ultime risposte. Grazie di tutto! Avevo risolto ancora qualche giorno fa ;)