Floating Point Numero In Binari Options


Si interpretano i dati in un modo sbagliato. 0 è il segno, quindi il numero è positivo 100 è l'esponente che è in realtà 1 (21). (Numeri il numero 0, e denormalizzato) -2 010 001 000 -1 011 0 100 1 101 2 110 3 111 (infiniti e Nans) P. S.: L'esponente è firmata e I valori possibili sono NAN. non un numero (codici di errore e roba) 0101 è la vostra mantissa. Che cosa questo significa, infatti, è che il vostro numero è 1,0101 (theres un po 'nascosto per una precisione ancora maggiore dal momento che ogni numero deve iniziare con 1. che 1 non è effettivamente memorizzata). Questo ti dà (1516) 2 2,625 The Floating Point Number è 45 (Base 16) vale a dire 01.000.101 (Base 2) .. 0101 è la parte mantissa e 100 è l'esponente uno. Sul ripristino quello che porta la mantissa si rinnova a 1,0101. Sottraendo il bias dal esponente, che è 3 in caso di rappresentanza 8 bit, l'esponente diventa 1. La rappresentazione binaria è 1,0101 21. De-normalizzante otteniamo 10.101, che è la rappresentazione binaria per 2.625. Ampliando JasonDs rispondere Penso che sia lecito ritenere che si capisce, o meglio, dare per scontato che un galleggiante può avere un esponente negativo. Ma se si arriva a pensarci, come si fa che in realtà accade Thats dove la polarizzazione viene a giocare, e credo che questo è l'anello mancante nella vostra comprensione. Nel suo link, menzionato la seguente legge per il calcolo della polarizzazione: dove k è il numero di bit nel campo dell'esponente. Nel tuo esempio, k era 3 bit, in modo che il bias è 3. In questo modo è possibile codificare qualsiasi esponente nel range -3,4 (compreso). Così ora il suo spera chiaro che quando sei decodifica il numero, è necessario unbias l'esponente prima. Così il vostro 24 è in realtà 21 come indicato JasonD. ha risposto 10 marzo 13 alle 12:14 La vostra risposta 2017 Stack Exchange, IncFloating Point Thomas Finley, aprile 2000 Sommario e Introduzione Questo documento spiega lo standard a virgola mobile IEEE 754. Spiega la rappresentazione binaria di questi numeri, come convertire in decimale da virgola mobile, come convertire da virgola mobile a decimale, discute casi particolari in virgola mobile, e, infine, termina con un po 'di codice C per favorire quelle comprensione della virgola mobile. Questo documento non copre operazioni con numeri in virgola mobile. Ho scritto questo documento in modo che se si sa come rappresentare, è possibile saltare la sezione di rappresentanza, e se si sa come convertire in decimale da singola precisione, è possibile saltare quella sezione, e se si sa come convertire in singola precisione da decimale, è possibile saltare quella sezione. Rappresentazione In primo luogo, sapere che i numeri binari possono avere, se youll perdona il mio dire così, un punto decimale. Funziona più o meno nello stesso modo che il punto decimale fa con numeri decimali. Ad esempio, decimale 22,589 è soltanto 22 e 510 -1 810 -2 910 -3. Analogamente, il numero binario 101,001 è semplicemente 12 2 02 1 12 0 02 -1 02 -2 12 -3. o meglio, semplicemente 2 2 2 0 2 -3 (questo numero particolare funziona a essere 9.125, se questo aiuta il vostro pensiero). In secondo luogo, sanno che i numeri binari, come numeri decimali, possono essere rappresentati in notazione scientifica. Per esempio. Il decimale 923,52 può essere rappresentato come 9,2352 10 2. Allo stesso modo, i numeri binari può essere espresso in questo modo pure. Supponiamo di avere il numero binario 101.011,101 (che è 43,625). Questo sarebbe rappresentato utilizzando la notazione scientifica come 1,01,011101 millions 2 5. Ora che Im sicuro la comprensione è perfetto, posso finalmente entrare in rappresentazione. La precisione singola virgola mobile è un pacchetto di 32 bit, divisa in tre sezioni un bit, otto bit, e ventitré bit, in questo ordine. Farò uso del numero binario già citato 1,01,011101 millions 2 5 per illustrare come si potrebbe prendere un numero binario in notazione scientifica e rappresentarlo in virgola mobile notazione. Se convertiamo semplicemente da esadecimale a binario, 0x64 è 0110 0100, che è lo stesso risultato del 011001 dato sopra. Questo metodo è molto più veloce. In ogni caso Prendiamo quei numeri che abbiamo ottenuto, e li rappresentiamo come 0,011,001 mila, posizionandoli nell'ordine in cui li abbiamo acquisito. Mettere in sequenza con la rappresentazione binaria di 329, otteniamo 101001001,011,001 mila. Nella nostra notazione scientifica binaria, questo è 1,01001001011001 2 8. Abbiamo quindi utilizzare quello che sappiamo su come i numeri singoli di precisione sono rappresentati per completare questo processo. Il segno è positivo, in modo che il campo segno è 0. L'esponente è 8. 8 127 135, in modo che il campo esponente è 10000111. La mantissa è semplicemente 01.001.001,011001 millions (ricordate la implicita 1 della mantissa mezzi noi non includere il leader 1) più tuttavia molti 0s dobbiamo aggiungere al lato destro per fare quel numero binario lungo 23 bit. Dal momento che uno dei problemi a casa comporta che rappresenta questo come esadecimale, finirò con un numero esadecimale. Poi si rompe in quattro pezzi bit (poiché ogni cifra esadecimale è l'equivalente di 4 bit) e poi convertire ogni quantità quattro bit nel corrispondente cifra esadecimale. Così, in esadecimale, questo numero è 0x43A4B200. Numeri speciali volte il computer sente il bisogno di mettere avanti un risultato di un calcolo che riflette che qualche errore è stato fatto. Forse la grandezza del risultato di un calcolo è maggiore o minore di questo formato sembrerebbe essere in grado di sostenere. Forse si è tentato di dividere per zero. Forse youre cercando di rappresentare nessuno come si fa ad affrontare questi problemi, la risposta è che ci sono casi particolari di numeri in virgola mobile, in particolare quando il campo esponente è tutti i 1 bit (255) o tutti i 0 bit (0). Denormalizzato numeri, se si dispone di un campo esponente Questo è tutto a zero bit, questo è che cosa è chiamato un numero denormalizzato. Con il campo dell'esponente pari a zero, si potrebbe pensare che il vero esponente sarebbe -127, quindi questo numero sarebbe assumere la forma di 1.MANTISSA 2 -127 come descritto sopra, ma non è così. Invece, è 0.MANTISSA 2 -126. Si noti che l'esponente non è più il valore del campo dell'esponente meno 127. È semplicemente -126. Si noti inoltre che includiamo non è più un implicito un bit per la mantissa. A titolo di esempio, prendere il numero in virgola mobile rappresentato come 0x80280000. In primo luogo, convertire questo a binario. Il nostro bit di segno è 1, quindi questo numero è negativo. Il nostro esponente è 0, quindi sappiamo che questo è un numero denormalizzato. Il nostro mantissa è 0101, che riflette un vero e proprio mantissa di 0,0101 ricordiamo noi non comprendere quello che prima era un implicito un bit per un esponente pari a zero. Quindi, questo significa che abbiamo un numero -0,0101 2 2 -126 -0,3125 10 2 -126 -1,25 10 2 -128. Si può pensare a zero come semplicemente un altro numero denormalizzato. Zero è rappresentato da un esponente zero e mantissa di zero. Dalla nostra comprensione dei numeri denormalizzati, ciò si traduce in 02 -126 0. Questo bit di segno può essere sia positivo (0) o negativa (1), che porta ad uno zero positivo o negativo. Questo non rende molto senso matematicamente, ma è permesso. Proprio come il caso di tutti zero bit nel campo dell'esponente è un caso speciale, così è il caso di tutti uno bit. Se il campo esponente è tutte quelle, e la mantissa è tutti zero, allora questo numero è un infinito. Non ci può essere infiniti positivi o negativi a seconda del bit di segno. Ad esempio, 0x7F800000 è infinito positivo, e 0xFF800000 è infinito negativo. NaN (Not a Number) Queste quantità speciali hanno un campo esponente del 255 (tutti uno bit) come l'infinito, ma differisce dalla rappresentazione dell'infinito in quanto la mantissa contiene alcuni un bit. Non importa dove sono o quanti di loro ci sono, basta che ci sono alcuni. Il bit di segno sembra avere alcuna influenza su questo. Esempi di questa quantità speciale includono 0x7FFFFFFF, 0xFF81ABD0, 0x7FAA12F9, e soforth. Sintesi dei Casi particolari Una sintesi di casi particolari è indicato nella tabella sottostante. E 'più o meno una copia della tabella trova a pagina 301 della seconda edizione di Computer Organization and Design, il software di interfaccia hardware da Patterson e Hennessy, il libro di testo per l'Informatica 104 nel 2000 semestre primaverile. Anche se solo singola precisione è stato coperto nel testo di cui sopra, includo doppia precisione per ragioni di completezza. Quando, dove, e dove non quando si dispone di operazioni come 00 o sottraendo l'infinito da infinito (o qualche altro calcolo ambiguo), si otterrà NaN. Se si divide un numero per zero, si otterrà una infinità. Tuttavia, la contabilità per queste operazioni speciali richiede un certo sforzo da parte del progettista, e può portare a operazioni più lente come più transistor sono utilizzati in progettazione di chip. Per questo motivo volte CPU non tiene conto di queste operazioni, e invece generare un'eccezione. Ad esempio, quando si tenta di dividere per zero o fare operazioni con l'infinito, il mio computer genera eccezioni e si rifiuta di completare l'operazione (il mio computer ha un processore G3 o MPC750). Software Helper Se siete interessati a indagare ulteriormente, mi comprendono due programmi per cui posso fornire il codice C che è possibile eseguire per ottenere una maggiore comprensione di come floating point opere, e anche per controllare il vostro lavoro su vari compiti. Hex 2 Float Questo programma accetta come input un quantitativo esadecimale e lo legge come dati grezzi nel theFloat variabile. Il programma poi emette la rappresentazione esadecimale dei dati in theFloat (ripetendo l'ingresso), e stampa accanto ad esso la quantità virgola mobile che rappresenta. Mostro qui una corsa del campione del programma. Notare le quantità in virgola mobile (caso speciale 0, l'infinito, e non un numero). Per i numeri denormalizzati ma diversi da zero, questo programma visualizzerà zero anche se il numero non è in realtà pari a zero. Se si desidera ottenere intorno a questo problema, sostituire la F nella stringa di formattazione della funzione printf con e, che deplay il numero di grande precisione con la notazione scientifica. Non ho avuto come e perché trovo notazione scientifica estremamente fastidioso. Float 2 Hex Questa è una leggera modifica del programma Float Hex 2. L'eccezione è legge in un numero decimale. Proprio come ed emette la forma esadecimale più il numero in virgola mobile. Anche in questo caso includo una corsa campione di questo programma, confermando i risultati dei problemi di esempio ho ricoperto in precedenza in questo testo, insieme ad alcuni altri casi semplici. Si noti la rappresentazione esadecimale di 0,2. E questo è la fine di quel capitolo. Thomas Finley 2000Decimal di conversioni la procedura di conversione Floating-Point Le regole per la conversione di un numero decimale in virgola mobile sono i seguenti: convertire il valore assoluto del numero di binari, magari con una parte frazionaria dopo il punto binario. Questo può essere fatto convertendo le parti integranti e frazionarie separatamente. La parte integrale viene convertito con le tecniche esaminate in precedenza. La parte frazionaria può essere convertita per moltiplicazione. Questo è fondamentalmente l'inverso del metodo della divisione: abbiamo ripetutamente moltiplichiamo per 2, e Harvest ognuno bit come appare a sinistra del decimale. Append volte 2 0 fino alla fine del numero binario (che non cambia il suo valore). Normalizzare il numero. Spostare il punto binario in modo che sia un bit da sinistra. Regolare l'esponente di due in modo che il valore non cambia. Posizionare la mantissa nel campo mantissa del numero. Omettere lo uno, e riempire con zeri sulla destra. Aggiungere il bias per l'esponente di due, e posizionarlo nel campo dell'esponente. La polarizzazione è 2 k minus1 meno 1, dove k è il numero di bit nel campo dell'esponente. Per il formato a otto bit, k 3, in modo che il bias è 2 3minus1 meno 1 3. Per IEEE a 32 bit, k 8, in modo che il bias è 2 8minus1 meno 1 127. Impostare il bit di segno, 1 per negativo, 0 per positivo, a seconda del segno del numero originale. Utilizzando la procedura di conversione Conversione 2,625 al nostro formato in virgola mobile a 8 bit. La parte integrale è facile, 2 10 10 2. Per la parte frazionaria: Generazione 1 e non rimane nulla. Così 0,40625 10 0,01101 2. Normalizzare: 0.01101 2 1.101 2 volte 2 -2. Mantissa è 1010, esponente è -2 3 1 001 2. bit di segno è 0. Quindi 0,40,625 mila è 0 001 1010 1a 16 Converti -12.0 al nostro formato in virgola mobile a 8 bit. 12 10 1100 2. Normalizzare: 1100.0 2 1.1 2 volte 2 3. Mantissa è 1000, esponente è 3 3 6 110 2. bit di segno è 1. Così -12.0 è 1 110 1000 e8 16 Conversione decimale 1,7 al nostro formato in virgola mobile a 8 bit. La parte integrale è facile, 1 10 1 2. Per la parte frazionaria: Generazione 1 e continuare con il resto. Il motivo per cui il processo sembra continuare all'infinito è che lo fa. Il numero 710, che effettua una frazione decimale perfettamente ragionevole, è una frazione ripetuta in binario, così come la fazione 13 è una frazione ripetuta in decimale. (Si ripete in binario pure.) Non possiamo rappresentare questo esattamente come un numero in virgola mobile. Il più vicino si può venire in quattro bit è 0,1011. Dal momento che abbiamo già un leader 1, il miglior numero otto bit che possiamo fare è 1,1011. Già normalizzato: 1.1011 2 1,1011 2 volte 2 0. Mantissa è 1011, esponente è 0 3 3 011 2. bit di segno è 0. Il risultato è 0 011 1011 3b 16. Questo non è esatto, naturalmente. Se si converte di nuovo a decimale, si ottiene 1,6875. Convertire -1313.3125 IEEE formato in virgola mobile a 32 bit. La parte integrale è 1313 10 10.100.100,001 mila 2. Il frazionale: Genera 0 e continuare.

Comments