Domanda

Può un doppio (di un certo numero di byte, con un equilibrio mantissa / esponente ragionevole) sempre tenere pienamente precisamente l'intervallo di un intero senza segno di metà di quel numero di byte?

es. Può un otto byte raddoppiare completamente precisamente tenere la gamma di numeri di quattro byte unsigned int?

Che cosa questo si riducono a è se un galleggiante a due byte può tenere la gamma di un un byte unsigned int.

A un byte unsigned int sarà ovviamente 0 -.> 255

È stato utile?

Soluzione

Un IEEE754 doppio 64-bit possono rappresentare qualsiasi numero intero di 32 bit, semplicemente perché ha 53-dispari (a) bit disponibili per la precisione e l'intero a 32 bit deve solo, ben, 32 : -)

Sarebbe plausibile per una (non IEEE754 doppia precisione) a 64 bit numero decimale a ha meno di 32 bit di precisione. Ciò consentirebbe numeri davvero enormi (a causa l'esponente), ma a costo di precisione.

La conclusione è che, purché ci sono altri bit di precisione nella mantissa del numero in virgola mobile che ci sono nel numero intero (e abbastanza bit nella esponente per ridimensionare esso), allora può essere rappresentato senza perdita di precisione.


(a) Tecnicamente, il bit 53a precisione è un 1 implicita all'inizio della sequenza quindi la quantità di "variablity" può essere solo 52 bit. Che si tratti di 52 o 53, è ancora abbastanza bit per rappresentare ogni intero a 32 bit.

Altri suggerimenti

Sì. Un galleggiante (o doppio) è garantito per rappresentare esattamente qualsiasi numero intero che non ha bisogno di essere troncato. Per una doppia, non v'è di 53 bit di precisione, in modo che sia più che sufficiente per rappresentare esattamente un numero intero a 32 bit, e un minuscolo (statisticamente parlando) percentuale di quelli a 64 bit anche.

Esattamente quello che il campo è che si può rappresentare esattamente dipende da un sacco di fattori nell'implementazione, ma si può abbassare-bound è dicendo che, se il campo esponente è impostato su 0, è possibile esattamente rappresentare numeri interi fino a la larghezza del campo mantissa (assumendo un bit di segno). Per IEEE 754 a precisione doppia, questo significa che è possibile rappresentare i numeri 52-bit esattamente. In generale, il vostro mantissa sarà più della metà della larghezza della struttura complessiva.

Per maggiori dettagli su come funziona un doppio, si potrebbe desiderare di guardare a questo post sul blog: Anatomia di un numero in virgola mobile .

Non vorrei usare le parole "completamente appunto" quando si parla di numeri in virgola mobile. Ma sì, un double può rappresentare un intero a 32 bit.

Non so quali altre combinazioni di carri e interi che questo vale anche per.

In pratica, non si vuole perdere tempo con virgola mobile sopra quello che sono supportati dalla macchina, quindi basta passare per l'aritmetica razionale con bignum. In questo modo, avrete la garanzia di precisione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top