Monday 28 August 2017

Fixed Point Rappresentazione Binario Options


Sistema 3.7.Binary Fixed Point Un binario fisso punto è un altro esempio di un sistema di numero arabo. L'unica distinzione da decimale è la radice. Binary utilizza una radice di 2 invece di 10. Si precisa della radice (base) con un indice del numero. Da ora in poi, non ci assumiamo una base di 1.001,101 2 1 10 2 3 0 2 2 0 2 1 1 2 0 1 2 0 -1 -2 2 1 2 -3 Un modo facile lettura binaria è lavorare a sinistra e destra dal punto binario, raddoppiando o dimezzando il valore delle cifre ad ogni passo: le cifre utilizzate in qualsiasi sistema arabo vanno sempre da 0 a radix-1. Utilizzando cifre grandi permetterebbe di rappresentare un valore in più di un modo. Ad esempio, se il punto fisso binaria consentito l'uso della cifra 2, allora il numero due potrebbe essere rappresentata come 2 o 10. 3.7.1.Limitations di binario Converti 110 in binario. Cant essere fatto: come cercare di rappresentare 13 in decimale. Richiede un numero infinito di cifre. Questo è un problema per i calcoli monetari. Soluzioni (BCD, centesimi) 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 EditIntroduction a punto fisso Numero rappresentanza nella vita reale, ci occupiamo di numeri reali - i numeri con parte frazionaria. La maggior parte di computer moderni hanno il supporto nativo (hardware) per i numeri in virgola mobile. Tuttavia, l'uso di virgola mobile non è necessariamente l'unico modo per rappresentare i numeri frazionari. Questo articolo descrive la rappresentazione punto fisso di numeri reali. L'utilizzo del tipo di dati punto fisso viene usato ampiamente nella elaborazione digitale del segnale (DSP) e applicazioni di giochi, dove le prestazioni sono volte più importante di precisione. Come vedremo più avanti, l'aritmetica in virgola fissa è molto più veloce di aritmetica in virgola mobile. Ricordiamo che un numero binario: rappresenta il valore: 1 2 5 1 2 4 0 2 3 1 2 2 0 2 1 1 2 0 Ora, se dividiamo il numero 53 da 2, sappiamo che il risultato dovrebbe essere 26,5. Tuttavia, come possiamo rappresentare se abbiamo avuto solo rappresentazioni interi La chiave per rappresentare i numeri frazionari, come 26,5 sopra, è il concetto di punto di binario. Un punto binario è come il punto decimale in un sistema decimale. Esso agisce come un divisorio tra il numero intero e la parte frazionaria di un numero. In un sistema decimale, un punto decimale indica la posizione in un numero che il coefficiente dovrebbe moltiplicare per 10 0 1. Ad esempio, nella cifra 26.5, il coefficiente 6 ha un peso di 10 0 1. Ma cosa accade al 5 per destra del punto decimale Sappiamo dalla nostra esperienza, che porta un peso di 10 -1. Sappiamo che il quot26.5quot cifra rappresenta il valore quottwenty sei e halfquot perché 2 10 1 6 10 0 5 10 -1 26.5 Lo stesso concetto di punto decimale può essere applicato alla nostra rappresentazione binaria, facendo una pointquot quotbinary. Come nel sistema decimale, un punto binario rappresenta il coefficiente del termine 2 0 1. Tutte le cifre (o bit) a sinistra del punto binario ha un peso di 2 0. 2 1. 2 2. e così via. Cifre (o bit) a destra del punto binario porta un peso di 2 -1. 2 -2. 2 -3. e così via. Ad esempio, il numero: rappresenta il valore: Ora, richiamo in classe, discuteremo spostando un intero a destra di posizione di 1 bit è equivalente al dividendo il numero per 2. Nel caso di numero intero, dato che non hanno una parte frazionaria , semplicemente non possiamo rappresentare cifre a destra del punto binario, rendendo questo processo di spostamento di una divisione intera. Tuttavia, è semplicemente una limitazione di rappresentazioni interi di numero binario. In generale, matematicamente, in una posizione fissa virgola binaria, spostando la sequenza di bit di un numero a destra di 1 bit sempre divide per 2. Analogamente, spostando un numero da 1 bit sinistra moltiplica il numero per 2. L' processo di spostamento di cui sopra è la chiave per capire il numero punto fisso di rappresentanza. Per rappresentare un numero reale a computer (o qualsiasi hardware in generale), possiamo definire un punto di tipo numero fisso semplicemente implicitamente il luogo di binario di essere in una qualche posizione di un numero. Ci sarà poi semplicemente aderire a questa convenzione implicita quando rappresentiamo numeri. Per definire un tipo di punto fisso concettualmente, tutti abbiamo bisogno sono due parametri: la larghezza della rappresentazione numero e posizione del punto binario entro il numero Useremo la notazione fixedltw, BGT per il resto di questo articolo, dove w indica il numero di bit utilizzato nel suo complesso (la larghezza di un numero) e b indica la posizione del punto di conteggio binario dal bit meno significativo (contando da 0). Ad esempio, fixedlt8,3gt denota un numero punto fisso a 8 bit, di cui 3 diritto più bit sono frazionata. Pertanto, la sequenza di bit: Guardando a questo tavolo, si può quindi facilmente comprendere possiamo rappresentare il numero -2.5 con schema di bit quot1011quot, se si assume il punto binario è in posizione 1. A questo punto, si dovrebbe trovare che i numeri in virgola fissa sono davvero un parente stretto a intero rappresentazione. I due differisce solo nella posizione del punto binario. In realtà, si potrebbe anche prendere in considerazione la rappresentazione intero come casequot quotspecial di numeri in virgola fissa, dove il punto binario è in posizione 0. Tutte le operazioni aritmetiche un computer può operare su interi possono quindi essere applicate al numero di punto fisso pure. Pertanto, il beneficio di punto fisso aritmetica è che sono come straight-forward ed efficiente come interi aritmetica nei computer. Siamo in grado di riutilizzare tutto l'hardware costruito per per aritmetica intera per eseguire reale aritmetica numeri usando la rappresentazione punto fisso. In altre parole, l'aritmetica in virgola fissa viene fornito gratuitamente su computer. Lo svantaggio di numero di punto fisso, è che naturalmente la perdita di gamma e precisione quando si confronta con numero in virgola mobile rappresentazioni. Ad esempio, in una rappresentazione fixedlt8,1gt, la nostra parte frazionaria è precisa solo un quantum di 0.5. Non possiamo rappresentare numero come 0,75. Possiamo rappresentare 0.75 con fixedlt8,2gt. ma poi perdiamo gamma sulla parte intera. C non ha quottypequot nativo per numero di punto fisso. Tuttavia, a causa della natura della rappresentazione punto fisso, noi non semplicemente bisogno. Ricordiamo tutti aritmetica su numeri in virgola fissa sono gli stessi numeri interi, possiamo semplicemente riutilizzare il tipo integer int in C per eseguire operazioni aritmetiche punto fisso. La posizione del punto binario importa solo nei casi in cui il risultato della stampa sullo schermo o eseguire operazioni aritmetiche con differenti quottypequot (come quando si aggiungono int a fixedlt32,6gt). Punto fisso è un modo semplice ma molto potente per rappresentare numeri frazionari nel computer. Riutilizzando tutti i circuiti aritmetici interi di un computer, l'aritmetica in virgola fissa è ordini di grandezza più veloce di aritmetica in virgola mobile. Questo è il motivo per cui viene usato in molte applicazioni di gioco e DSP. D'altra parte, manca la gamma e precisione quel numero a virgola mobile offre. Voi, come un programmatore o progettista di circuiti, deve fare il compromesso.

No comments:

Post a Comment