Saturday 18 November 2017

Float Point Numero Rappresentazione Binario Options


Floating Numbers PointFixed a punto fisso numeri in virgola sono un modo semplice e veloce per esprimere numeri frazionari, utilizzando un numero fisso di bit. Sistemi senza supporto hardware in virgola mobile di frequente usano numeri in virgola fissa per rappresentare numeri frazionari. (Sistemi senza supporto hardware in virgola mobile comprende una vasta gamma di hardware - dai fascia alta DSP a virgola fissa, FPGA e ASIC personalizzati costosi che elaborano streaming media più veloce di qualsiasi unità di calcolo in virgola mobile mai costruito estremamente microcontrollori di fascia bassa ). Il termine Fixed-Point si riferisce alla posizione del punto binario. Il punto binario è analogo al punto decimale di una base-ten numero, ma poiché questo è binario piuttosto che decimale, viene usato un termine diverso. In binario, bit possono essere 0 o 1 e non vi è alcun simbolo separato per indicare dove si trova point binari. Tuttavia, immaginiamo, o dal presupposto, che il punto binario installati in un luogo fisso tra i bit designati nel numero. Per esempio, in un numero a 32 bit, si può supporre che il punto binario esiste direttamente tra bit 15 (15 perché il primo bit è numerata 0, non 1) e 16, dando 16 bit per l'intero numero di parte e 16 bit per la parte frazionaria. Si noti che il bit più significativo nel campo intero numero è generalmente designato come bit di segno lasciando 15 bit per l'intero numeri grandezza. Larghezza e precisione Modifica La larghezza di un numero a virgola fissa è il numero totale di bit assegnati per l'archiviazione per il numero a virgola fissa. Se abbiamo memorizzato tutta la parte e la parte frazionaria in diverse posizioni di memoria, la larghezza sarebbe la quantità totale di memoria per il numero. La portata di un numero a virgola fissa è la differenza tra il numero minimo possibile, e il numero massimo possibile. La precisione di un numero a virgola fissa è il numero totale di bit per la parte frazionaria del numero. Poiché possiamo definire dove vogliamo il punto binario fisso per essere collocata, la precisione può essere qualsiasi numero fino ae compresa la larghezza del numero. Si noti tuttavia che la maggiore precisione abbiamo, la gamma meno totale abbiamo. Ci sono un certo numero di standard, ma in questo libro useremo n per la larghezza di un numero a virgola fissa, p per la precisione, e R per il range totale. Non tutti i numeri possono essere rappresentati esattamente da un numero a virgola fissa, e quindi l'approssimazione più vicina è usato. La formula per calcolare la rappresentazione intero (X) in un formato Qm. n di un numero float (x) è il seguente: Per convertire nuovamente la seguente formula: Alcuni esempi in formato Q3.4: carri a caso scelti: alcuni esempi di il (molto comune) 1 formato Q7.8: Poiché la posizione del punto binario è interamente concettuale, la logica per aggiungere e sottrarre numeri in virgola fissa è identica alla logica necessaria per l'aggiunta e sottraendo interi. Così, quando si aggiunge la metà più uno mezzo in formato Q3.4, ci si aspetterebbe di vedere: che è uguale a uno come ci si aspetterebbe. Ciò vale anche per la sottrazione. In altre parole, quando si aggiungere o sottrarre numeri in virgola fissa, il punto binario nella somma (o differenza) sarà situato esattamente nello stesso luogo come nei due numeri su cui operiamo. Quando moltiplicare due numeri in virgola fissa a 8-bit avremo bisogno di 16 bit per contenere il prodotto. Chiaramente, dato che ci sono un numero diverso di bit nel risultato in confronto agli ingressi, il punto binario deve essere previsto per spostare. Tuttavia, funziona esattamente in binario come avviene in decimale. Quando moltiplichiamo due numeri decimali, la posizione del punto decimale è N cifre a sinistra dei prodotti più a destra cifre, dove N è la somma del numero di cifre situati a destra del punto decimale nel moltiplicatore e il moltiplicando . Così, in decimale quando moltiplichiamo 0,2 volte 0.02, otteniamo: Il moltiplicatore è una cifra a destra del punto decimale e il moltiplicando ha due cifre a destra del punto decimale. Così, il prodotto ha tre cifre a destra del punto decimale (cioè, il punto decimale si trova a tre cifre a sinistra). Funziona lo stesso in binario. Dall'esempio aggiunta sopra, sappiamo che il numero metà in formato Q3.4 è pari a 0x8 in esadecimale. Fin dai tempi 0x8 0x8 in esadecimale è 0x0040 (anche in esadecimale), il risultato a punto fisso può essere dovrebbe essere 0x0040 - finchè sappiamo dove si trova il punto binario. Consente di scrivere il prodotto in binario: Poiché sia ​​il moltiplicatore e moltiplicando hanno quattro bit verso destra del punto binario, la posizione del punto binaria nel prodotto è di otto bit a sinistra. Quindi, la nostra risposta è 00.000.000,01 milioni, che è, come ci si aspetterebbe, pari ad un quarto. Se vogliamo che il formato dell'output per essere la stessa come formato dell'ingresso, dobbiamo restringere la gamma degli ingressi per evitare overflow. Per convertire da Q7.8 torna a Q3.4 è una semplice questione di spostare il prodotto giusto da 4 bit. numeri fissi-Point sono spesso utilizzati internamente nei filtri digitali tra cui filtri FIR e IIR. Ci sono una serie di considerazioni pratiche per l'applicazione di algoritmi FIR e IIR con numeri in virgola fissa. 2 3 Molti sistemi embedded che producono onde sinusoidali, come i generatori DTMF, memorizzare una tabella sine nella memoria di programma. (Relativo usato per approssimare il seno matematica () e coseno) funzioni (). Poiché tali sistemi hanno spesso una quantità molto limitata di memoria di programma, spesso numeri in virgola fissa sono utilizzati due modi diversi quando vengono utilizzati tali tabelle: i valori memorizzati nelle tabelle ei brads utilizzati per indicizzare queste tabelle. I valori memorizzati nella tabella sine Edit Tipicamente un quadrante delle funzioni seno e coseno sono memorizzati nella tabella. In genere si tratta di un quadrante in cui tali funzioni producono valori di uscita nel range di 0 a 1. I valori in tali tabelle sono di solito memorizzati come numeri in virgola fissa - spesso i numeri a 16 bit in formato numeri senza segno Q0.16 o 8 bit in valori Q0.8 senza segno. Sembra che ci siano due modi popolari per gestire il fatto che Q0.16 sopraelevazione esattamente manico 1.0, gestisce solo i numeri da 0 a (1.0-2-16): (a) scala, esattamente una potenza di due (in questo caso 216 ), come la maggior parte degli altri sistemi a virgola fissa, e sostituire i valori (clip) troppo grande per memorizzare come quella più grande valore che può essere memorizzato: così 0 è rappresentato come 0, 0.5 rappresentato come 0x8000, (1.0-2-16) rappresentato come 0xFFFF, e 1,0 troncati e anche rappresentati come 0xFFFF. 4 (b) Scala dal valore massimo possibile (in questo caso 0xFFFF), quindi entrambi i valori massimi e minimi possono essere rappresentate esattamente: così 0 è rappresentato come 0, (1.0-2-16) rappresentato come 0xFFFE e 1.0 è rappresentato come esattamente 0xFFFF. 5 Alcune persone disegnare cerchi abbastanza precise e calcolare sine abbastanza preciso e coseno con una spline Bezier. La tavola diventa 8 valori che rappresentano una singola curva di Bezier approssimare 18 di un cerchio con una precisione di circa 4 parti per milione, o 14 di un cerchio con una precisione di circa 1 per mille. 6 7 Molte persone preferiscono rappresentare rotazione (come ad esempio gli angoli), in termini di giri. La parte intera del turno dice quante rivoluzioni intere sono successe. La parte frazionaria delle spire, moltiplicata per 360 (o 1 2 8) utilizzando le normali firmato l'aritmetica a virgola fissa, dà un angolo valida nella gamma di -180 gradi (- radianti) a 180 gradi (radianti). In alcuni casi, è conveniente usare moltiplicazione senza segno (anziché moltiplicazione firmato) su un angolo di binario, che dà il corretto angolo nell'intervallo da 0 a 360 gradi (2 radianti). Il vantaggio principale di memorizzazione angoli come frazione punto fisso di giro è la velocità. Combinando qualche angolo di posizione corrente con un certo angolo incrementale positiva o negativa per ottenere la nuova posizione è molto veloce, anche su lenti microcontrollori a 8 bit: richiede un'unica aggiunta integer, ignorando troppopieno. Altri formati per la memorizzazione angoli richiedono lo stesso Inoltre, oltre a casi particolari per gestire i casi limite di traboccante 360 ​​gradi o underflowing 0 gradi. Rispetto alla memorizzazione di angoli in un formato binario angolo, la memorizzazione angoli in qualsiasi altro formato - come ad esempio 360 gradi per dare un giro completo, o 2 radianti per dare un giro completo - si traduce inevitabilmente in alcuni modelli di bit dando angoli al di fuori di tale intervallo, richiede misure supplementari per spaziare-ridurre il valore della portata desiderata, o risultati in alcuni modelli di bit che non sono validi angoli affatto (NaN), o entrambi. Utilizzando un formato di angolo di binario in unità di turno ci permette in modo rapido (usando shift-e-maschera, evitando moltiplicazione) separare i bit in: bit che rappresentano giri interi (ignorate quando si cerca il seno dell'angolo alcuni sistemi mai preoccuparsi di memorizzare questi bit, in primo luogo) 2 bit che rappresentano i bit quadrante che sono direttamente utilizzati per indice nella tabella di ricerca basso per i bit meno di un passo nella tabella indice (bit accumulatore di fase, ignorato quando si cerca il seno dell'angolo senza bit fase interpolazione) il basso per assicurare una maggiore risoluzione di frequenza, anche senza interpolazione. Alcuni sistemi utilizzano i bit di ordine inferiore di interpolare linearmente tra i valori indicati nella tabella. 12 Ciò consente di ottenere una maggiore precisione utilizzando un tavolo più piccolo (risparmio di spazio del programma), sacrificando alcuni cicli a questo calcolo interpolazione supplementare. Alcuni sistemi si fanno ancora più precisione utilizzando una tabella ancora più piccolo, sacrificando un paio di cicli di utilizzare quei bit di ordine inferiore per calcolare interpolazione cubica. 4 Forse il formato più comune angolo binario è brad. Brads modificare molti sistemi embedded memorizzano l'angolo, la parte frazionaria dei giri, in un formato angolo di binario singolo byte. 13 Ci sono diversi modi di interpretare il valore in quel byte, ognuno dei quali significa (più o meno) lo stesso angolo: un angolo in unità di brad (radianti binari) memorizzati come un intero senza segno a 8 bit, da 0 a 255 brad un angolo in unità di groppini memorizzati come un intero con segno a 8 bit, da -128 a 127 brads un angolo in unità di spire, memorizzato come una svolta frazionata in formato Q0.8 senza segno, da 0 a poco meno di 1 piena girare un angolo in unità di giri, memorizzato come una svolta frazionale in formato Q0.7 firmato (), da -12 a poco meno di 12 giro completo un giro completo 14 è 256 brad 15 è di 360 gradi. Se un singolo byte pretende dato sufficiente precisione, il sistema brad può essere facilmente esteso con i bit più frazionari - 65.536 conteggi per turno possono essere rappresentati in 16 bit. 16 Per la lettura di questo EditDecimal di Floating-Point Converter Circa il decimale a virgola mobile Converter Questo è un decimale al convertitore binario a virgola mobile. Sarà convertire un numero decimale al suo più vicino a precisione singola e doppia precisione IEEE 754 numero binario a virgola mobile, con round-half-to-anche arrotondamento (la modalità di arrotondamento di default IEEE). E 'implementato con aritmetica precisione arbitraria, così le sue conversioni siano correttamente arrotondati. Sarà convertire i numeri sia normali e subnormali, e convertirà numeri che overflow (all'infinito) o underflow (a zero). Il numero a virgola mobile risultante può essere visualizzata in dieci forme: in decimale, in binario, in normalizzato notazione scientifica decimale, in normalizzato notazione scientifica binaria, come normalizzato volte decimali una potenza di due, come decimali volte interi una potenza di due , come decimale volte interi una potenza di dieci, come esadecimale floating-point costante, in binario grezzo, e in esadecimale crudo. Ogni modulo rappresenta il valore esatto del numero in virgola mobile. Perché usare questo Converter Questo convertitore vi mostrerà il motivo per cui i numeri nei vostri programmi per computer, come 0.1, non si comportano come you8217d aspettano. All'interno del computer, la maggior parte dei numeri con un punto decimale possono essere approssimate solo un altro numero, un pochino lontano da quello che si desidera, deve stare dentro per esso. Ad esempio, in singola precisione in virgola mobile, 0,1 diventa 0,100000001490116119384765625. Se il programma sta stampando 0.1, si sta mentendo a voi se si sta stampando ,100,000001 millions, it8217s ancora sdraiato, ma almeno it8217s ti dice davvero don8217t avere 0.1. Come utilizzare questo convertitore Immettere un numero positivo o negativo, sia in versione standard (ad esempio 134.45) esponente (ad esempio 1.3445e2) forma o. Indicare i valori frazionari con un punto decimale (lsquo. rsquo), e di non utilizzare le virgole. In sostanza, è possibile inserire ciò che un programma per computer accetta come in virgola mobile letterale, tranne senza alcun suffisso (come lsquofrsquo). Selezionare le caselle per la precisione IEEE che si desidera scegliere doppio. Singolo. o entrambi. (Doppio è l'impostazione predefinita.) Doppio: un significante 53-bit (meno se subnormali) con un esponente a 11 bit single significa un significante 24-bit (meno se subnormali) con un esponente a 8 bit. Selezionare le caselle per qualsiasi formato di output che si desidera scegliere uno o tutti e dieci. (Decimale è l'impostazione predefinita.) Fare clic su lsquoConvertrsquo per convertire. Clicca lsquoClearrsquo per ripristinare la forma e ripartire da zero. Se si desidera convertire un altro numero, basta digitare il numero originale e cliccare lsquoConvertrsquo 8212 non c'è bisogno di cliccare lsquoClearrsquo prima. Ci sono dieci forme di output tra cui scegliere: decimale. Visualizzare il numero a virgola mobile in decimale. (Espandere scatola di uscita, se necessario, per vedere tutte le cifre.) Binary. Visualizzare il numero a virgola mobile in formato binario. (Espandere scatola di uscita, se necessario, per vedere tutte le cifre.) Normalizzato notazione scientifica decimale. Visualizzare il numero in virgola mobile in decimale, ma compatto, utilizzando la notazione scientifica normalizzata. (Espandere scatola di uscita, se necessario, per vedere tutte le cifre.) Normalizzato notazione scientifica binaria. Visualizzare il numero in virgola mobile in formato binario, ma compatto, utilizzando normalizzato notazione scientifica binaria. Nota . numeri subnormali sono mostrati normalizzato, con il loro esponente reale. volte decimali normalizzati una potenza di due. Visualizzare il numero a virgola mobile in una notazione scientifica normalizzato ibrido, come normalizzato decimale numero di volte una potenza di due. volte intero decimale una potenza di due. Visualizzare il numero in virgola mobile come decimale volte interi una potenza di due. (La rappresentazione binaria del numero intero decimale è lo schema di bit della rappresentazione in virgola mobile, zeri meno finali.) Questa forma è più interessante per esponenti negativi, in quanto rappresenta il numero in virgola mobile come frazione diadica. volte intero decimale una potenza di dieci. Visualizzare il numero in virgola mobile come decimale volte interi una potenza di dieci. Questa forma è più interessante per esponenti negativi, in quanto rappresenta il numero in virgola mobile come frazione. (Espandere scatola di uscita, se necessario, per vedere tutte le cifre.) Esadecimale costante in virgola mobile. Visualizzare il numero a virgola mobile come in virgola mobile costante esadecimale. Nota . Ci sono molti modi per formato esadecimale costanti in virgola mobile, come si farebbe vedere se, per esempio, è confrontato l'output di Java, Visual C, gcc C e programmi Python. Le differenze tra diverse lingue sono superficiali se 8212 zeri finali possono o non possono essere visualizzati, esponenti positivi possono o non possono avere un segno più, ecc Questo convertitore formati delle costanti senza zeri finali e senza segni più. Nota . Come molti linguaggi di programmazione, questo convertitore mostra i numeri subnormali non normalizzata, con i loro esponenti impostati per l'esponente minima normale. Nota . L'ultima cifra esadecimale in un floating-point costante esadecimale può avere trailing 0 binari all'interno di questa doesn8217t implicano necessariamente esistono quei bit nel formato IEEE selezionato. binari originari. Visualizzare il numero in virgola mobile nel formato IEEE prima (bit di segno seguito dal campo dell'esponente seguito dal campo significando). esadecimale Raw. Visualizzare il numero in virgola mobile nel formato IEEE grezzo, equivalente al formato binario grezzo ma ha espresso in modo compatto in esadecimale. (Vedi qui per maggiori dettagli su queste forme di output.) Ci sono due bandiere di uscita: inesatto. Se selezionato, questo dimostra che la conversione era inesatta che è, doveva essere arrotondato al un'approssimazione del numero di ingresso. (La conversione è inesatta quando l'uscita decimali non corrisponde all'ingresso decimale, ma questo è un modo più veloce per dire.) Nota. Questo bandiere convertitore di overflow verso l'infinito e underflow a zero inesatta. Subnormali. Se selezionato, questo dimostra che il numero era troppo piccola, e convertito con meno di piena precisione (la precisione attuale è mostrato tra parentesi). Attuazione ho scritto questo convertitore da zero 8212 non si basa sulle funzioni di conversione nativi come strtod () o strtof () o printf (). Essa si basa sul grande algoritmo basato intero che descrivo nel mio articolo ldquoCorrect decimale a virgola mobile utilizzando grossi numeri interi rdquo. I8217ve implementato utilizzando BCMath. Per ragioni pratiche, Ive impostare una (un po ') limite arbitrario sulla lunghezza dell'input decimale you8217ll un messaggio di errore se lo ha colpito. Questo filtrerà gli input che sarebbe altrimenti troppo pieno all'infinito o underflow a zero, ma sarà anche impedire di entrare un po 'a metà strada ldquohardrdquo casi di arrotondamento. (Per la cronaca, però, questo convertitore accetta tutti gli esempi duri I8217ve discusso sul mio sito.) Per tutti gli ingressi che sono accettati però, l'uscita è corretta (nonostante qualche bug in fuga il mio test approfonditi).binary Frazioni mentre lavorano lo stesso in principio, frazioni binarie sono diversi da frazioni decimali a quali numeri possono rappresentare accuratamente con un dato numero di cifre, e quindi anche in quali numeri si traducono in errori di arrotondamento: Specificamente, binario possono rappresentare solo quei numeri come frazione finita in cui il denominatore è una potenza di 2. Purtroppo, questo non comprende la maggior parte dei numeri che possono essere rappresentati come frazione definita in base 10, come 0,1. Arrotondato a 4 cifre valore come frazione arrotondati e in questo modo si ottiene già un errore di arrotondamento quando basta annotare un numero come 0,1 e correre attraverso il vostro interprete o compilatore. La sua non è così grande come 380 e può essere invisibile perché i computer tagliati fuori dopo 23 o 52 cifre binarie anziché 4. Ma l'errore è lì e causerà problemi alla fine solo se si ignorano. Perché usare binario Al livello più basso, i computer sono basati su miliardi di elementi elettrici che hanno solo due stati, (di solito a bassa e alta tensione). Interpretando questi come 0 e 1, la sua molto facile da costruire circuiti per la memorizzazione dei numeri binari e fare calcoli con loro. Mentre la sua possibile simulare il comportamento di numeri decimali con circuiti binarie così, la sua meno efficiente. Se i computer i numeri decimali utilizzati internamente, theyd hanno meno memoria e più lenta allo stesso livello di tecnologia. Poiché la differenza di comportamento tra numeri binari e decimali non è importante per molte applicazioni, la scelta logica è costruire computer basati su numeri binari e vivere con il fatto che alcuni attenzione e sforzo sono necessari per applicazioni che richiedono un comportamento decimale simile. Il Floating-Point Guida Home Basic Risposte Riferimenti xkcd formati numerici

No comments:

Post a Comment