2011-06-06 11 views

risposta

16

La "densità" di numeri in virgola mobile diminuisce molto come si ottiene più lontano da zero.

Questo perché il punto di virgola mobile IEEE viene memorizzato essenzialmente come notazione scientifica, pertanto l'intervallo viene preferito per una precisione uniforme. (Se fosse precisione uniforme, sarebbe virgola fissa, non in virgola mobile.)

In altre parole, i numeri sono memorizzati sotto forma significando * 2 esponente, quindi se l'esponente diventa grande, un piccolo cambiamento nel significato e produce un grande cambiamento nel numero (e viceversa).

Quindi no, non si può presumere che la differenza tra 2 e il prossimo doppio sia la stessa di epsilon; non lo è.

+2

Vale la pena sottolineare che questa è una scelta di design consapevole: spesso è utile avere un'alta precisione vicino allo zero, mentre noi siamo più indulgenti con numeri più grandi. Quindi float/double è un bel tipo di dati a tutto tondo che è * spesso * abbastanza buono in numeri precisi, piccoli e in generale, ma meno precisi. È un tentativo di rendere un tipo di dati semplice a 32 o 64 bit il più utile possibile. Ad ogni modo, +1 da me – jalf

2

I doppi sono numeri a virgola mobile. Consistono in un signum, un significante e un esponente.

Più alto è l'esponente, maggiore è la differenza tra un doppio e il suo successore.

Più basso è l'esponente, minore è la differenza tra un doppio e il suo successore.

Problemi correlati