2012-06-06 4 views

risposta

16

Il numero 0.298475 non è rappresentabile esattamente in un double (dato che non è una frazione il cui denominatore è una potenza di due, essendo 11939/40000), e il effettivo numero memorizzato è più vicina rispetto 0,29,847 mila a 0,29848.

+4

0.298474999999999990318855225268634967505931854248046875, per la precisione. – dan04

+1

In altre parole, ci sono in realtà due passaggi di arrotondamento: uno quando il letterale '0.298475' viene convertito in un' double', e un altro quando si stampa un certo numero di cifre in 'cout'. – aschepler

+2

@ dan04: Questa è una visualizzazione un po 'priva di significato; un float IEEE754 a 64 bit contiene solo circa 17 cifre decimali di informazioni utili ... –

1

Per quanto posso vedere dalla documentazione setprecision() non esegue alcun arrotondamento, ma imposta solo il numero massimo di cifre visualizzate dopo il punto decimale. Le possibili rappresentazioni di numeri double e float possono differire dagli inizializzatori costanti che si utilizzano.

Problemi correlati