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 ;)