Come vengono stampati alcuni float IEEE 754 in modo succinto?

2

Usando questa calcolatrice , posso vedere come il decimale ".8" e l'espressione ".7 + .1" ha rappresentazioni diverse:

.8      = 1.1001100110011001100110011001100110011001100110011010 *2-1
.7 + .1 = 1.1001100110011001100110011001100110011001100110011001 *2-1
                                                              ^^  

Ma quale meccanismo fa sì che "0.8" venga stampato per il valore massimo? Per esempio. alert(.8) in JavaScript. Perché non stampa qualcosa come "0.800000011920929"?

Questa è una caratteristica di IEEE 754 o del linguaggio di programmazione che la implementa?

    
posta Steve Clay 07.08.2014 - 19:20
fonte

2 risposte

6

Il documento Come stampare accuratamente i numeri in virgola mobile di Guy L. Steele Jr. e Jon L White descrive un approccio al problema della stampa dei numeri.

Citando da quel foglio:

What is the correct number of digits to produce if the user doesn’t specify? If a system prints too many digits, the excess digits may be “garbage,” reflecting more information than the number actually contains; if a system prints too few digits, the result will be wrong in a stronger sense: converting the decimal representation back to binary may not recover the original binary value.

Quale echos commento di delnan : "Cosa ti aspetti che venga stampato?"

Per quanto posso dire, come vengono stampati i numeri IEEE 754 è una caratteristica del linguaggio di programmazione.

Lo Steele e il white paper spiegano alcune tecniche per stampare con precisione i numeri in virgola mobile, e loro, o qualcosa di simile, potrebbero essere implementati in JavaScript.

    
risposta data 07.08.2014 - 19:51
fonte
3

La maggior parte delle implementazioni arrotondano i numeri in virgola mobile per impostazione predefinita a 6 cifre significative (rimuovendo eventuali zeri finali) quando li convertono in stringhe, poiché ciò sembra corrispondere alle aspettative della maggior parte degli utenti.

    
risposta data 07.08.2014 - 19:51
fonte

Leggi altre domande sui tag