QNA > P > Perché 0,1+0,2 Non È Uguale A 0,3 Nella Maggior Parte Dei Linguaggi Di Programmazione?

Perché 0,1+0,2 non è uguale a 0,3 nella maggior parte dei linguaggi di programmazione?

Nella maggior parte dei computer è vero se si usa == come confronto

per capire perché è necessario capire come i numeri in virgola mobile sono memorizzati su un computer.

il problema principale sul perché in questo caso particolare è perché 0.1 e 0.3 non sono nella stessa base esponenziale all'interno di un float.

quindi a causa di tale 0.3 ha meno precisione di 0.1 e 0.2, e quando si aggiunge 0.1 e 0.2 c'è un po' di troncamento.

primo.

0.1 su un computer non è davvero 0.1 è davvero 0.100000001490116119384765625

(il suo più vicino il computer può ottenere ma il suo non esattamente 0,1)

0,2 su un computer non è realmente 0,2 è invece 0.20000000298023223876953125

  1. 0.100000001490116119384765625 
  2. +0.20000000298023223876953125 
  3. ------------------------------- 
  4. 0.30000000447034835815429687  
  5. but a computer cannot store this number either so it stores  
  6. 0.2999999821186065673828125 
  7. (and yes because 0.1 and 0.2 are in different bases it does lost a few values) 

now 0.3 is also not 0.3 but: 0.300000011920928955078125

e chiaramente 0.300000011920928955078125 non è uguale a 0.2999999821186065673828125

si avvicina molto ma non è uguale.

quindi l'aggiunta di punti fluttuanti a meno di casi specifici (nella maggior parte dei casi potenze di 2 o numeri che possono essere divisi per due dopo meno di 24 volte), non può essere rappresentata esattamente come virgola mobile e darà sempre errori.

e quando fate questo con un computer avete bisogno di sapere qual è il vostro margine di errore

(sui float è circa lo stesso numero diviso per un 10^6) per essere sempre al sicuro ed è relativo al numero che state guardando.

in altre parole se aggiungete 1 + 10^6 l'errore sarà terribilmente grande in effetti così tanto che aggiungendo 1 a 10 ^8 vi darà 10^8 senza alcun cambiamento.

Di Philipines

Come proteggere la vostra privacy dalle app cinesi :: Come mai 0.1 + 0.2 == 0.3 è falso in JS?
Link utili