Normalizzato Form Binario Options


Come rappresentare 0,148 2 in normalizzata aritmetica in virgola mobile con il formato (0,148) (,00100101111.) 2 Abbiamo spostarlo 3 bit verso sinistra per rendere più normalizzato (1,00,101111 millions) 2 2. Esponente 1164 (75) (1.001.011) e 2 Mantissa (01.001.111) 2. Così la rappresentazione in virgola mobile è (0100101100101111) 2 (4B2F) Rappresentazione Un Ma se memorizziamo il denormalizzato mantissa in 8 registro bit, quindi non ci vorrà hanno conservato gli ultimi tre 1s e quindi mantissa sarebbe normalizzato da (,00,100101 millions) 2 (1,00,101 milioni ) 2 con l'inserimento di 3 0s invece di 1s. La rappresentazione sarebbe stata (0.100.101,100101 miliardi) 2 (4B28) Rappresentazione B Così, mentre la normalizzazione, fa il processore prende in considerazione i bit denormalizzati mantissa oltre 8 bit troppo O arrotonda fuori Qual è corretta solo: A o B Vuol memorizzare la mantissa nella rappresentazione in virgola fissa Come fa tutto pagina workThis è tradotto dall'originale utilizzando il traduttore di Google. IEEE 754 - standard binario aritmetica float Autore: Yashkardin Vladimirnbsp nbsp softelectro. ru nbsp nbsp 2009-2011 nbsp nbsp nbsp nbsp nbsp infosoftelectro. ru 1. Titolo standard. Questo standard è stato progettato associazione IEEE (Institute of Electrical and Electronics Engineers) e viene utilizzato per rappresentare i numeri reali (virgola mobile) in codice binario. Lo standard più utilizzato per virgola mobile, usata da molti dispositivi a microprocessore e logica e software. Il titolo completo del standard in associazione IEEE: IEEE Standard per Binary virgola mobile aritmetica (ANSIIEEE Std 754-1985) titolo della norma in Commissione Elettrotecnica Internazionale IEC: IEC 60559: 1989, Binary l'aritmetica in virgola mobile per sistemi a microprocessore (IEC 559: 1989 - la vecchia sigla dello standard) Nel 2008, l'associazione ha rilasciato IEEE standard IEEE 754-2008, che ha incluso lo standard IEEE 754-1985. Descrizione 2.Brief dello standard. L'edizione originale dello standard: IEEE Standard per Binary virgola mobile aritmetica nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp Copyright 1985 da The Institute of Electrical and Electronics Engineers, Inc. 345 East 47th Street, New York, NY 10017, USA La standard contiene 23 pagine di testo in 7 sezioni e un allegato: 1.Scope 1.1 Obiettivi di attuazione 1.2 Inclusioni 1.3 Esclusioni 2.Definitions 3.Formats 3.1 set di valori 3.2 formati di base 3.3 formati estesi 3.4 Combinazioni di formati 4.Rounding () 4.1 rotonda al più vicino 4.2 Directed arrotondamenti 5.Operations 4.3 Arrotondamento di precisione 5.1 aritmetiche 5.2 radice quadrata di 5,3 virgola mobile formato Conversioni 5.4 conversione Tra virgola mobile e interi formati 5.5 rotonda numeri in virgola mobile a valore intero 5,6 binario decimale di conversione di 5,7 Confronto 6.Infinity, NaN, e firmato Zero 6.1 Infinity aritmetiche 6.2 Operazioni con NaNs 6.3 Il segno Bit 7.Exceptions 7.1 Operazione non valida 7.2 divisione per zero 7.3 Overflow underflow 7.4 7.5 8.1 inesatte 8.Traps Trappola Handler 8.2 precedenza A. Recommended funzioni e predicati nbsp nbsp nbsp nbspUnfortunately , l'IEEE è evoluto da un organismo pubblico internazionale di ingegneria (che era in origine) un'organizzazione commerciale. Questa organizzazione possiede il copyright di pubblicare lo standard IEEE754-1985. Quindi, se si desidera leggere, con lo standard originale, è necessario acquistare per circa 80. Tuttavia, la legge russa mi permette di commentare insegnare questo standard. Pertanto, l'ulteriore Ill dare una presentazione arbitraria di standard ed esprimere la loro opinione su di esso per scopi di formazione. Standard IEEE 754-1985 determinerà: essere normalizzata come numeri positivi e negativi in ​​virgola mobile come rappresentare i numeri in virgola positiva e negativa denormalizzato galleggianti Come per rappresentare il numero di zero come un valore speciale per rappresentare l'infinito (Infiniti) Come rappresentare uno speciale valore Nessun numero (NaN o NaNs) quattro modalità di arrotondamento IEEE 754-1985 definisce quattro formato per i numeri in virgola mobile: a precisione singola (singola precisione) a 32 bit a precisione doppia (doppia precisione) a 64-bit con singolo precisione estesa (precisione singola esteso) 43 bit (raramente usato) doppio esteso precisione (doppio esteso precisione) 79 bit (in genere utilizzano 80 bit) 3. concetti di base nella rappresentazione dei numeri in virgola mobile. 3.1 Presentazione di una forma esponenziale normalizzata. Prendiamo, per esempio, il numero decimale 155,625 immaginare il numero in forma esponenziale normalizzata: 1,55625872910 2 1,556258729exp 10 2 Numero 1,556258729exp 10 2 è costituito da due parti: una mantissa M 1,55,625 mila e l'esponente exp 10 2 Se il mantissa è nell'intervallo 1 -2. 3.2 Presentazione di una forma esponenziale denormalizzato. Prendiamo, per esempio, il numero decimale 155.625 immaginare il numero di denormalizzato modo esponenziale: 0,155625872910 3 0,1556258729exp 10 3 Numero 0,1556258729exp 10 3 si compone di due parti: una mantissa M 0,155625 ed esponente exp 10 3 Se il mantissa è nell'intervallo 0,1 -3. 3.3 Conversione decimale a numero in virgola mobile binario. Il nostro problema si riduce a un numero decimale numeri in virgola mobile in numero a virgola mobile binaria in forma normalizzata esponenziale. Per fare questo espandiamo il dato numero di cifre binarie: 155.625 187292 7 087292 6 087292 5 187292 4 187292 3 087292 2 187292 1 187292 0 187292 -1 087292 -2 187292 -3 155.625 128 0 0 16 8 0 2 1 0,5 0 0,125 155.625 10 10011011,101 2 - il numero di decimali e binari in virgola mobile Lasciate che il numero risultante alla forma normalizzata in decimale e sistema binario: 1,556258729exp 10 2 1,00110111018729exp 2 111 di conseguenza, abbiamo i componenti principali di l'esponenziale normalizzato di numeri binari: Mantissa Esponente M1.0011011101 exp 2 111 4. Descrizione conversione dei numeri di IEEE 754. 4.1 la trasformazione di un normalizzati numeri binari in formato 32 bit IEEE 754 l'applicazione principale di tecnologia e di programmazione formati sono stati 32 e 64 bits. Ad esempio, in VB utilizzando i tipi di dati singola (32 bit) e doppie (64 bit). Si consideri la trasformazione del binario formato numerico 10011011,101 a precisione singola (32 bit) standard IEEE 754. Altri formati dei numeri in IEEE 754 è una copia ingrandita della singola precisione. Per fornire il numero nel formato a precisione singola IEEE 754 dovrebbe portare alla forma normalizzata binaria. In 3, abbiamo fatto questa conversione al numero 155,625. Consideriamo ora, come numero binario normalizzato viene convertito in un formato a 32 bit IEEE 754 Descrizione della trasformazione in formato a 32 bit IEEE 754: Numero può essere o -. Quindi giocare un po 'per designare il segno: 0-positivo 1 negativo Questo bit più significativo a 32 sequenza di bit. Poi vai bit esponente, questa alloca 1 byte (8 bit). Espositore può essere, come il numero, con il segno o -. Per determinare il segno dell'esponente, non introdurre un ulteriore bit di segno, aggiungere l'offset all'esponente metà byte 127 (0111 1111). Cioè, se la nostra esposizione 7 (111 in binario), poi spostato esponente 7 127 134. E se i nostri espositori era di -7, poi compensata Cabine 127-7 120. esponente Biased è scritto nel assegnati 8 bit. Tuttavia, quando avremo bisogno di ottenere un esponenziale numeri binari, ci è sufficiente sottrarre 127 da questo byte. I rimanenti 23 bit accantonati per la mantissa. Tuttavia, l'normalizzato mantissa binaria primo bit è sempre 1, dato che il numero è compreso tra 1 La tabella mostra il numero decimale 155,625 nel formato a 32 bit IEEE754: 001 1011 1010 0000 0000 0000 2 971 87761,99584e292 Da quanto sopra, dato che la maggior parte dei numeri in formato IEEE754 ha un piccolo errore relativo stabile: l'errore relativo massimo possibile per il numero è singolo 2 -23 100 11,920928955078125e-6 l'errore massimo relativo possibile per il numero di doppi 2 -52 100 2,2204460492503130808472633361816e-14 7.5 informazioni generali per il numero di singola e doppia precisione standard IEEE 754. Tabella 3. informazioni sul bit formato 3264 in ANSI IEEE Std 754-1985 numero di lunghezza standard, un po 'compensato i esponenziale (e), i bit il resto della mantissa (M), i bit denormalizzato numero binario normalizzato numero binario denormalizzato di (-1) S 87292 (E -126) 8729 M2 23 F (-1) S 87292 (E -1022) 8729M2 52 normalizzato decimale F numero di decimali (-1) F S 87292 (E-127) 8729 (1 M2 23) F (-1) S 87292 (E-1023) 8729 (1M2 52) Abs. max. numero di errore Rel. max. denorms errore. numero Rel. max. norme di errore. numero 2 -149 8776 1,401298468729e -45 2 -1074 8776 4,940656468729e -324 2 127 8729 (2-2 -23) 8776 3,402823478729e 38 2 1023 8729 (2-2 -52) 8776 1,797693138729e 308 8 . a completare i numeri in standard IEEE 754. nel presentare i numeri in virgola mobile in standard IEEE 754 sono spesso numeri arrotondati. Lo standard prevede quattro modi per l'arrotondamento dei numeri. Modi per arrotondamento dei numeri di IEEE 754: arrotondamento tendente al numero intero più vicino. L'arrotondamento tende a zero. L'arrotondamento tende a 8734 arrotondamento tende a -8734 Tabella 3. Esempi di arrotondamento a un decimale al numero intero più vicino Come è arrotondamento mostrato negli esempi riportati nella Tabella 3. Quando si converte un numero di scegliere uno dei modi di arrotondamento. Per impostazione predefinita, questo è il primo modo, arrotondando al numero intero più vicino. Spesso in dispositivi diversi utilizzando il secondo metodo - arrotondato a zero. Quando arrotondamento a zero, scarta semplicemente numeri di livello di significato, quindi questo è il più facile nell'implementazione hardware. 9. problemi di calcolo causati utilizzando lo standard IEEE754. Standard IEEE 754 è ampiamente usato in ingegneria e programmazione. La maggior parte dei microprocessori moderni sono costruiti con realizzazione hardware di rappresentazioni di variabili reali nel formato di IEEE754. Linguaggio di programmazione ed il programmatore non può cambiare questa situazione, un riposo di un numero reale nel microprocessore non esiste. Quando si crea il IEEE754-1985 rappresentazione standard di una variabile reale in forma di 4 o 8 byte sembrare valore molto grande, poiché la quantità di RAM MS-DOS è pari a 1 MB. Un programma in questo sistema potrebbe essere utilizzato solo 0,64 MB. Per i sistemi operativi moderni la dimensione di 8 byte è nullo, tuttavia le variabili nella maggior parte dei microprocessori continuano ad essere nel formato IEEE754-1985. Si consideri il calcolo dell'errore, causati dall'uso dei numeri nel formato IEEE754 9.1 Errori associati con una precisione di rappresentazione dei numeri reali nel formato IEEE754. Una riduzione pericoloso. Questo errore è sempre presente nei calcoli del computer. La ragione per la sua presenza è descritto nel paragrafo 7.4. -6 Per doppia 10 -14 Gli errori assoluti possono essere significativi, come per la singola 10 31 e per il doppio 10 292, che può causare problemi con i calcoli. Se il conteggio campione sulla carta, la risposta è 1. Errore assoluto è 7. Perché ottenere la risposta sbagliata numero 123456789 nella singola 4CEB79A3hex (IEEE) 123.456.792 (dec) la segnalazione degli errori assoluto è 3 Numero 123.456.788 nel singolo 4CEB79A2hex (IEEE) 123456784 (dec) segnalazione errore assoluto è -4 errore relativo del numero iniziale di circa 3,24 e-6 Come risultato, una operazione errore relativo del risultato era 800, cioè aumentata di 2,5 e 8 volte. Questo è ciò che io chiamo una riduzione pericolosa. cioè diminuzione catastrofica di accuratezza nel funzionamento in cui il valore assoluto del risultato è molto più piccola rispetto a qualsiasi delle variabili di input. Infatti, la precisione di errore della rappresentazione dei più innocui nei calcoli di computer, e solitamente molti programmatori non sono prestando attenzione. Tuttavia, essi si può essere molto frustrante. 9.2 Errori associati con la coercizione improprio dei tipi di dati. Errore selvaggio. Questi errori sono causati dal fatto che il numero originale presentato nel formato di singolo e doppio in un formato di solito non uguali tra loro. Per esempio: il numero originale 123456789,123456789 singola: 4CEB79A3 123456792,0 (dec) Doppio: 419D6F34547E6B75 123456789,12345679104328155517578125 La differenza tra singolo e doppio dell'importo: 2,87654320895671844482421875 Ecco un esempio per VB: Errore relativo del risultato è il seguente: 8734 (infinito) Questo errore viene chiamato uno zero sporco. Se le variabili conducono allo stesso tipo, questo errore non accadrà. Pertanto, le variabili ed i risultati intermedi dei calcoli necessari per essere portati allo stesso tipo di dati. Ad esempio, il requisito di mostrare lo stesso tipo descritto nel linguaggio standard C ISO IEC 9899: 1999. Prestare attenzione al fatto che non basta a portare tutti i dati originali in un singolo tipo. Necessario per portare i risultati delle operazioni intermedie allo stesso tipo. Ecco un esempio di un errore nel risultato intermedio: Qui l'errore si verifica perché il risultato intermedio di 1 3 nella linea c c-1 3 sarà di tipo double, non singolo. Per sbarazzarsi dell'errore si deve dare un risultato intermedio del tipo di singolo operatore che usa fusione CSng. Un esempio di portare tipo di dati per GNU C, inviata da Gregory Sitkarevym: Nella seconda versione si può vedere che la divisione delle costanti il ​​risultato intermedio è dato al tipo di galleggiante (precisione singola in C). Queste opzioni sono stati compilati ed eseguiti usando il GNU C. Se si compilare ed eseguire le opzioni di cui sopra sono visualizzabili sul VC (Visual Studio), i risultati sarebbero stati invertiti. Cioè, l'opzione 2 sarebbe il risultato di -9,934108, e l'opzione 1 Risultato: 0.000000. Quindi può essere scoraggiante conclusione che il risultato dei calcoli può dipendere dal tipo e versione del compilatore. In questo caso, si può supporre che il compilatore VC dà automaticamente i tipi di variabili, e il tentativo di portare la forza dello stesso tipo non riesce. Se l'opzione 1 (senza il cast) di incontrare con la variabile a precisione doppia (doppio), poi l'errore di non portare i dati e Risultato 0.000000 Quindi, nella maggior parte dei casi, per liberarsi dei dati cast è semplicemente quello di utilizzare il tipo di dati double e dimenticare il tipo di singolo (float). errori di calcolo causati da non portare il tipo di dati che io chiamo gli errori selvatici in quanto si riferiscono alla ignoranza delle norme e la teoria di programmazione (ad esempio, con una scarsa istruzione di base) 9.3 Errori causati dallo spostamento della mantissa. fori circolari. Questi errori sono associati a perdita di precisione del risultato in numeri mantisse intersezione incomplete sull'asse reale. Se i numeri mantissa non intersecano sull'asse reale, quindi addizione e sottrazione tra questi numeri sono impossibili. Ad esempio, prendiamo il numero di single: 47FFFFFF 131071,9921875 (dec) Nel sistema binario, questo numero appare come: 11111111111111111,1111111 mostriamo alcune operazioni del computer di più, e questo numero nel formato di cifre significative Singolo in mantissa del numero binario nel formato standard non più di 24 Red indica i dati oltre questo limite e non sono coinvolti nel formato standard 1. Inoltre con lo stesso numero (spostamento di errore 0.0). 2. Oltre al numero di piccole 2 volte (shift errore - 0,00,390625 millions). 3. Inoltre, con un numero minore di 2 volte 23 (turno di errore - 0,007,812 mila). 4. Inoltre, con un numero minore di 2 volte 24 (turno di errore - 0,007,812 mila). In quest'ultimo caso la mantissa di numeri separati, e le operazioni aritmetiche con questi numeri sono insignificanti. Come si può vedere dagli esempi precedenti spostare errore si verifica se i numeri normalizzati iniziali sono diversi esponente. Se i numeri differiscono di più di 2 23 (singolo) e 2 52 (per il doppio), quindi addizione e sottrazione tra questi numeri non sono possibili. Relativa massima risultato di errore dell'operazione è di circa 5,96 e-6, che non supera un errore relativo rappresentazione del numero (p.9.1). Anche se l'errore relativo qui è tutto a posto, ci sono altri problemi. Primo, lavorare con i numeri solo in una ristretta gamma dell'asse reale, dove la mantissa intersecano. In secondo luogo, per ogni sorgente del limite di un ciclo chiamato buco ciclica. Mi spiego, se vi è un ciclo in cui viene aggiunto alla somma del numero originale, vi è un limite numerico alla quantità per questo numero. Cioè, la quantità raggiunge una certa dimensione cessa di aumentare aggiungendolo al numero originale. Ecco un esempio di un buchi ciclici nel sistema di controllo automatico: Esiste una pianta farmaceutica produrre compresse del peso di 10 mg. Composto da: che forma la macchina, serbatoio di 500 kg di stoccaggio, macchine per l'imballaggio, il sistema di controllo automatico. macchina di stampaggio alimenta il bunker a 10 compresse alla volta. Riempimento macchina prende una pillola. Il sistema di controllo automatico tiene conto delle compresse ricevuti nella tramoggia della macchina di stampaggio e il prelievo delle macchine confezionatrici bunker. Cioè, vi è un programma che mostra la produzione tramoggia di riempimento in kg. Quando nel bunker saranno oltre 500 macchina di stampaggio kg di prodotto si erge su una pausa, include il codice nel bunker sarà di 200 kg di prodotto. Riempimento macchina per fermare se il bunker è inferiore a 10 chili e si avvia quando il bunker sarà più di 100 kg di prodotto. Entrambe le vetture possono fermare da tempo per servire, non dipendenti l'una dall'altra (grazie al bunker). Ecco un esempio di un buchi ciclici nel sistema di controllo automatico: Esiste una pianta farmaceutica produrre compresse del peso di 10 mg. Composto da: che forma la macchina, serbatoio di 500 kg di stoccaggio, macchine per l'imballaggio, come si sa, funziona in un ciclo infinito. Supponiamo che una macchina di riempimento giorno rimase troppo a lungo e un bunker pieno di fino a 300 kg. Cosa accade dopo lo accendo Un esempio semplificato di gestione ciclo di programma: In questo esempio, la macchina di riempimento prelevato dalla tramoggia 100 kg di prodotto, e il peso dei prodotti nella tramoggia non è cambiata. Perché non cambiare Poiché i numeri mantissa 300 e 0,00001 formato disgiunti singolo. Quindi, portare il peso della tramoggia della macchina di stampaggio a 500 kg e fermare. macchina di riempimento prenderà tutte le compresse dalla tramoggia e si ferma anche. Il programma mostrerà il peso di 500kg nel bunker. Vieni in esecuzione specialisti, sensori di prova, fili, computer, e dire che il programma bloccato. Ma il programma non appendere, continua a funzionare senza problemi e ogni controllo confermerà questo. Semplicemente il numero di 0.0001 ha colpito nel foro ciclico e emergono da esso non può. Come risultato, siamo stati fortunati che si trattava di un impianto farmaceutico, non il Sayan-Shushenskaya GES. In realtà, un programmatore esperto farebbe mai una sottrazione ciclica (o sommatoria) in questo modo. Questo esempio è lo scopo fittizio, e quindi non può essere considerato, anche se dal punto di vista della matematica sono tutti senza problemi. Questo errore è tipico di matematici e programmatori alle prime armi. Direi che il lavoro principale del programmatore è quello di lottare con gli errori, ma non nella soluzione matematica al problema. Ecco un esempio di una corretta soluzione a questo problema, grazie Sitkarevym Gregory: L'esempio precedente è preso dalla reale collo industriale. Per chiarezza, semplifichiamo l'esempio precedente. Come si vede da questo esempio, il programmatore deve calcolare l'errore del risultato in ogni ciclo, per tenere conto nel ciclo successivo. Si noti che il programmatore dovrebbe essere assolutamente pronti a fare alcuni concetti fondamentali della matematica non possono essere soddisfatte nei calcoli in un formato IEEE754. Ad esempio, le regole di commutativity algebrica (a b) un (a c) b, è di solito non eseguita in questi calcoli. Purtroppo, a oggi l'educazione fondamentale che sta ricevendo molto poca attenzione. 9.4 Gli errori a causa dell'arrotondamento. pari a zero sporco. Quando calcoli al computer possono distinguere due tipi di arrotondamento: 1. Il risultato di un'operazione aritmetica è sempre arrotondata. 2. uscita e ingresso di un numero reale nella finestra di Windows viene arrotondato. Nel primo caso, la variabile viene arrotondata ad uno dei 4 tipi di arrotondamento IEEE754, all'arrotondamento di default si verifica al numero intero più vicino. In questo caso, la variabile riceve un nuovo valore arrotondato. In p.9.2 abbiamo considerato la somma di due numeri identici: 1. Aggiunta con lo stesso numero (spostamento di errore 0.0). Qui il risultato della somma dei due numeri è assolutamente preciso, ma il risultato è stato completato da un microprocessore. Così, al risultato esatto è stato aggiunto a errore di arrotondamento. In generale, l'errore di arrotondamento è all'interno della precisione dei numeri. Nel secondo caso, la variabile non cambia il suo significato, solo nella finestra di Windows visualizza il valore arrotondato dei numeri reali. Si scopre che la variabile originale e la visualizzazione in Windows è un numero diverso. Questo non è colpa del formato IEEE754, questo è un bug di Windows. singola variabile viene visualizzata in di Windows 7 cifre significative arrotondati al numero intero più vicino. 3DFCD6EA 0,12345679104328155517578125 di dialogo viene visualizzata come 0,1234568 Per le variabili di tipo Double a una finestra di Windows visualizza 15 cifre significative arrotondato al numero intero più vicino. 3FBF9ADD3746F67D 0,12345678901234609370352046653351862914860248565673828125 visualizzata come 0,123456789012346 La questione di quanto sia importante variabile quando si entra nella finestra di Windows 0,123456789012346 Questo valore sarà uguale a questo numero: 3FBF9ADD3746F676 0,1234567890123459965590058118323213420808315277099609375 Cioè, il valore di 3FBF9ADD3746F67D in genere non può inserire direttamente in il codice di programma. Ma siamo in grado di imbrogliare e incolla nella x 0,123456789012346 1 E-16. La variabile risultante sarà uguale a 3FBF9ADD3746F67D (questo è usato nell'esempio zero sporco) Visualizzare o ad un PC attraverso la finestra è un numero impossibile. Come risultato dell'azione nasce Finestre una serie di situazioni spiacevoli. 1. Non è necessario capacità tecnica per visualizzare o immettere i valori esatti. delle variabili nelle finestre, che di per sé è molto triste. 2. L'emergere di gravi errori, come ad esempio lo zero sporco. lo zero sporco è quando voi o il programma presuppone che la variabile non è uguale a zero - azzerare Molto spesso, questo errore si verifica nell'interfaccia di operatore. Ad esempio, dopo l'azzeramento del peso di programmi di confezionamento. Il risultato del programma nell'esempio precedente Come risultato, una variabile che l'operatore ritiene di zero - zero non è uguale Errore relativo del risultato è infinito. Nelle operazioni di confronto logiche che non è zero sono maggio deviano l'esecuzione del programma ad un altro ramo dell'algoritmo. tasso di 9.5 Errore ai numeri normadenorma. Il numero di assassini. Questi errori si verificano quando si lavora con i numeri si trova al confine della rappresentazione numero denormalizzato normalizzata. Essi sono associati con differenze nella rappresentazione dei numeri in formato IEEE754 e trasferire le formule differenza di numeri reali formato IEEE754. Cioè, il dispositivo (o software) dovrebbero utilizzare algoritmi diversi a seconda della posizione di un numero reale su un formato retta numerica. Inoltre, esso comporta una complicazione di dispositivi e algoritmi, ci sono ancora incertezze della zona di transizione. L'incertezza della zona di transizione è che la norma non definisce un valore specifico del contorno di transizione. In sostanza, il limite di transizione è tra due numeri reali: L'ultimo numero denormalizzato 000FFFFFFFFFFFFF: valore decimale accurata di questo numero: 2,2250738585072008890245868760858598876504231122409594654935248025624400092282356951787758888037591552642309780950 4343120858773871583572918219930202943792242235598198275012420417889695713117910822610439719796040004548973919380791 9893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228631669542910508020181592 6642134996606517803095075913058719846423906068637102005108723282784678843631944515866135041223479014792369585208321 5976210663754016137365830441936037147783553066828345356340050740730401356029680463759185831631242245215992625464943 0083685186171942241764645513713542013221703137049658321015465406803539741790602258950302350193751977303094576317321 0852507299305089761582519159720757232455434770912461317493580281734466552734375e-308 e il primo numero 0.010.000 miliardi normalizzato: valore decimale accurata di questo numero: 2,2250738585072013830902327173324040642192159804623318305533274168872044348139181958542831590125110205640673397310 3581100515243416155346010885601238537771882113077799353200233047961014744258363607192156504694250373420837525080665 0616658158948720491179968591639648500635908770118304874799780887753749949451580451605050915399856582470818645113537 9358049921159810857660519924333521143523901487956996095912888916029926415110634663133936634775865130293717620473256 3178148566435087212282863764204484681140761391147706280168985324411002416144742161856716615054015428508471675290190 3161322778896729707373123334086988983175067838846926092773977972858659654941091369095406136467568702398678315290680 984617210924625396728515625e-308 Dal momento che il confine è un numero reale, la sua precisione può essere impostato su infinito e dispositivo digitale o un programma non può avere il bit di decisione di includere alcuni gamma di numero. Ad esempio, un insetto 53632 per PHP, che ha causato il panico nei primi mesi del 2011 lt htmlgt ltbodygt ltphp d 2.2250738585072011e-308 fine gt ltbobygt lthtmlgt Immettere un numero 2.2250738585072011e-308 ha causato un blocco del processo con quasi 100 CPU carico. Altri numeri di questa serie di problemi non causati (2.2250738585072009e-308, 2.2250738585072010e-308, 2.2250738585072012e-308) segnalare un problema ricevuto 30.12.2010, 10.01.2011 fissato dallo sviluppatore. Dal momento che PHP è un preprocessore viene utilizzato dalla maggior parte dei server, quindi qualsiasi rete utente entro 10 giorni, è stato in grado di chiudere qualsiasi host. Come scrivere gli sviluppatori che il bug funziona solo in sistemi a 32 bit, ma se si aumenta la precisione del confine, allora penso che i sistemi a 64 bit, anche, appendere (non verificato). Il motivo per il panico è chiaro: qualsiasi utente, ad un certo livello di diligenza e di conoscenza, ha avuto l'opportunità di ridurre la maggior parte delle risorse informative del pianeta entro dieci giorni. Non vorrei - si tradurrebbe in altri esempi di tali numeri e tali errori. 10 La parte finale Da quanto sopra è evidente che l'opinione che il risultato in virgola mobile non è oltre l'errore relativo nel riportare il maggior numero è falso. Errori elencati al punto 9 si sommano. Tali errori come sporca e pericolosa riduzione a zero possono fare errori di calcolo inaccettabile. Particolare attenzione nella programmazione dei calcoli del computer del programmatore dovrebbe essere pagato ai risultati vicini allo zero. Alcuni esperti ritengono che il formato dei numeri rappresenta una minaccia per l'umanità. Si può leggere su di esso in questo articolo IEEE754-tick minaccia l'umanità Anche se molti dei fatti in questo articolo over-drammatizzato, e forse male interpretato, ma il problema sta calcolando correttamente riflette filosoficamente. Im non una drammatizzazione dei calcoli sullo standard IEEE754. Standard Operating dal 1985 e pienamente inserito nello standard IEEE754-2008, che hanno ampliato l'accuratezza dei calcoli. Tuttavia, il problema dell'affidabilità di calcolo oggi è molto urgente, e lo standard raccomandazioni IEEE754-2008 e ISO non hanno risolto questo problema. Credo che in questa zona aveva bisogno di un'idea innovativa che gli sviluppatori standard IEEE754-2008 purtroppo non possiedono. Idee innovative di solito provengono da. Le principali idee innovative nel nostro mondo sono state fatte da dilettanti (persone che la pensano non per soldi). Un esempio lampante di questa situazione è stata l'invenzione del telefono. Quando un insegnante di scuola Alexander Graham Bell (Alexander Graham Bell) si avvicinò con un brevetto per invenzione del telefono al presidente della società di telecomunicazioni Western Union Company, che è di proprietà del collegamento del cavo transatlantico con l'offerta di acquistare il suo brevetto per la invenzione del telefono, non è stato espulso - no. Il presidente della società ha offerto di prendere in considerazione tale questione il parere di esperti nel campo della telegrafia, costituito da specialisti e studiosi nel campo delle telecomunicazioni. Gli esperti hanno dato il loro parere che questa invenzione è inutile nel campo delle telecomunicazioni ed è inutile. Alcuni esperti hanno anche scritto un rapporto che tsirkachestvo e ciarlataneria nbsp nbsp Alexander Graham Bell, insieme a suo suocero, ha deciso autonomamente di promuovere la sua invenzione. Dopo circa 10 anni, il gigante delle telecomunicazioni Western Union Co. è stata praticamente eliminata business della telefonia dalla sfera di tecnologie di telecomunicazione. Oggi si può vedere in molte città russe finestre che dice Western Union, questa azienda che si occupa di trasferimento di denaro in tutto il mondo, e una volta che lei era il gigante internazionale delle telecomunicazioni. Possiamo concludere: opinioni di esperti in tecnologie innovative sono inutili se si pensa che dal momento che l'invenzione del telefono (1877) in menti della gente che qualcosa è cambiato, sei sbagliato. Se gli scienziati (che stanno inventando nuove) e professionisti (che sanno come utilizzare il noto) non può risolvere il problema, è necessario l'innovazione. Collegamenti a nuove idee nel campo della rappresentazione dei numeri reali in hardware: 1. Approksimetika 2. Se siete a conoscenza di altre idee innovative nel campo delle rappresentazioni di numeri reali, allora saremo felici di avere collegamenti a queste fonti. Vorrei suggerire per rappresentare i numeri reali come a virgola fissa. Per visualizzare l'intera gamma di numeri sufficienti doppio di avere una variabile costituita da 1075 bit parte intera e 1075 pezzi di parte frazionaria, vale a dire circa 270 byte per variabile. In questo caso, tutti i numeri saranno presentati con la stessa precisione assoluta. È possibile lavorare con i numeri in tutta la gamma l'asse reale, cioè, diventa possibile riassumere un gran numero di piccoli numeri. numeri passo sulla asse reale è uniforme, cioè l'asse reale è lineare. Il tipo di dati sarà solo uno, cioè non è necessario il complesso reale e altri tipi. Qui il problema è la realizzazione di registri di microprocessori dimensione di 270 byte, ma non è un problema per la tecnologia moderna. Per scrivere p.9 ho dovuto creare un programma che rappresenta un numero come variabile ad un punto fisso, lunghe 1075.1075 byte. Se il numero può essere rappresentato come una stringa di caratteri ASCII, cioè un simbolo equivale a un cifre. Basta dovuto scrivere tutte le operazioni aritmetiche con le stringhe ASCII. Questo programma è simile a un calcolo di carta. Dal matematica microprocessore capacità in esso non vengono utilizzati, ha detto lentamente. Perché l'ho fatto non ho potuto trovare un programma che potrebbe accuratamente rappresentare il numero di formato IEEE754, in forma decimale. Ho anche non trovare il programma (anche se hanno certamente quello che senza dubbio) dove è possibile inserire nella scatola 1075 del significative cifre decimali. Qui per esempio solo il valore decimale del numero di doppio 7FEFFFFFFFFFFFFF: 17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955 863276687817154045895351438246423432132688946418276846754670353751698604991057655128207624 549009038932894407586850845513394230458323690322294816580855933212334827479782620414472316 8738177180919299881250404026184124858368,0 È possibile utilizzare la v.1.0 nbsp IEEE754 per studiare e valutare gli errori quando si lavora con numeri reali fornite nel formato IEEE754. Riferimenti: 1. IEEE Standard per Binary virgola mobile aritmetica. Copyright 1985 dall'Institute of Electrical and Electronics Engineers, Inc. 345 East 47th Street, New York, NY 10017, USA Ringraziamenti: Sitkarevu Grigory (sitkarevkomitex. ru, sinclair80gmail). Per l'assistenza nella creazione di un articolo. Archivio delle opinioni con commenti nbsp Vedi nbspnbsp (Inviaci un feedback sulla e-mail: infosoftelectro. ru) conversione binaria Note Queste note includono più informazioni di quante è necessario per MGF 1107. MGF 1107 studenti possono ignorare tutto ciò che riguarda le frazioni binari, la versione binaria di notazione scientifica, ed esadecimali quando si legge quanto segue. Noi usiamo solo interi binari in MGF 1107. binario a decimale conversione Questo viene fatto applicando la definizione dei valori posto per un numero binario, valutando ciascuno in base dieci. Ad esempio, convertiamo 1001 due da binario a decimale come segue: 9 che è dieci. La maggior parte delle persone trovano che questo sia il più facile dei due conversioni. Le frazioni sono trattati con esponenti negativi per ogni valore posto frazionario, proprio come con i numeri decimali, in modo che convertono 0,11 due da binario a decimale, riconoscendo che dà 0,75 dieci. MGF 1107 i compiti non include esempi con le frazioni binarie. Decimale alla conversione binaria è ottenuta la parte intera (lavora da destra a sinistra) suddividendo ripetuto da due (che sposta il binario punto a sinistra), mantenendo il resto come cifra successiva binaria e con il quoziente intero per il passo successivo . Ci fermiamo quando il quoziente è pari a zero. (Il modo più semplice per ottenere la parte intera è quello di utilizzare la funzione di conversione esadecimale di una calcolatrice e convertire esadecimale a binario, ma non stiamo usando calcolatrici in questa unità.) La parte frazionaria è ottenuto (ora di lavoro da sinistra a destra) per ripetuta moltiplicazione per due (che sposta il binario punto verso destra), mantenendo la parte intera come cifra successiva binario e utilizzando la parte frazionaria per il passaggio successivo. Non ci sono scorciatoie facili per la parte frazionaria, ma attenzione per qualsiasi modello che si ripete. Possiamo scrivere il risultato come numero binario a virgola mobile normalizzato con la convenzione che la mantissa (significando) è compreso tra 1 e 2 - cioè la mantissa è della forma 1.ffffff. 1. Conversione 11 dieci a binario: Il numero intero viene convertito da ed è 1011 due. (Si tratta di 1.011 x 2 3 come numero a virgola mobile normalizzato.) 2. Convertire 5,75 dieci a binario: La parte intera viene trovato ed è 101 due. La parte frazionaria si ottiene così il numero è 101.11 due. (Questo è 1,0111 x 2 2 come numero a virgola mobile normalizzato.) 3. Conversione 0,1 dieci a binario: La parte frazionaria si ottiene così il numero è ,0001100110011. due (Questo è 1,10,011001 millions x 2 -4 come un numero in virgola mobile normalizzato..) numeri esadecimali Decimale - Esadecimale - Tabella binario Nel lontano 1950, il ILLIAC è stato costruito presso la University of Illinois (Urbana-Champaign) utilizzando il sexadecimal sistema numerico. Tuttavia, essi contati. 8, 9, K, S, N, J, F, L anziché utilizzare. 8, 9, A, B, C, D, E, F come facciamo oggi. Hanno scelto tali lettere (che sono stati ricordati con la K mnemonico ing S zato N umbers J ust F o L aughs) perché rivelati i più convenienti quando convertite un teletype da utilizzare per la punzonatura del nastro di carta utilizzata per IO. (This info from J. Sutherland Frame, professor emeritus of Mathematics at Michigan State University, an early programmer of the 1957 clone of the ILLIAC known as MISTIC. both of which are in the ORDVAC family of computers.) (An aside: Fans of 2001: A Space Odyssey will recall that the HAL-9000 computer was built in Champaign-Urbana. This reflects the historic role the Univ. of Illinois had in the early development of computers with the construction of the ILLIAC. In addition, although Everyone knows that HAL is rot25 of IBM, the serial number reflects the sequence used by Control Data, whose 6000 series machines were the supercomputer in the mid-60s when 2001 was made. The Cray-1 would have been an 8000 series machine, but CDC chose the Star design that led to the Cyber-205 and Cray formed his own company. Kubrick guessed about right in placing a 9000 series machine that could talk in the early 90s - HAL was born on 11292 - but someone forgot the mouse.) This material is 169 Copyright 2000, by James Carr. Displaying IEEE Doubles in Binary Scientific Notation By Rick Regan emspJuly 1st, 2010 An IEEE double-precision floating-point number, or double, is a 64-bit encoding of a rational number. Internally, the 64 bits are broken into three fields: a 1-bit sign field, which represents positive or negative an 11-bit exponent field, which represents a power of two and a 52-bit fraction field, which represents the significant bits of the number. These three fields 8212 together with an implicit leading 1 bit 8212 represent a number in binary scientific notation, with 1 to 53 bits of precision. For example, consider the decimal number 33.75. It converts to a double with a sign field of 0, an exponent field of 10000000100, and a fraction field of 0000111000000000000000000000000000000000000000000000. The 0 in the sign field means it8217s a positive number (1 would mean it8217s negative). The value of 10000000100 in the exponent field, which equals 1028 in decimal, means the exponent of the power of two is 5 (the exponent field value is offset, or biased, by 1023). The fraction field, when prefixed with an implicit leading 1, represents the binary fraction 1.0000111. Written in normalized binary scientific notation 8212 following the convention that the fraction is written in binary and the power of two is written in decimal 8212 33.75 equals 1.0000111 x 2 5 . In this article, I8217ll show you the C function I wrote to display a double in normalized binary scientific notation. This function is useful, for example, when verifying that decimal to floating-point conversions are correctly rounded . Subnormal Numbers In double-precision floating-point, most numbers are represented in normalized form, with an implicit 1 bit giving 53 bits of precision. However, very small numbers 8212 the so-called subnormal numbers 8212 are represented in unnormalized form, with no implicit leading 1 bit and zero to 51 leading zeros of fraction field. These numbers are encoded with an exponent field of zero, with their true exponent equal to -1022 minus the location of the first 1 bit in their fraction field. This means that subnormal numbers are scaled by powers of two in the range 2 -1074 through 2 -1023. with accompanying precision of one to 52 bits. Although subnormal numbers are encoded as unnormalized, they can still be written as normalized. For example, the decimal number 1e-310 converts to a subnormal double with a sign field of 0, an exponent field of 00000000000, and a fraction field of 0000000100100110100010001011011100001110011000101011. This can be printed as 1.00100110100010001011011100001110011000101011 x 2 -1030 8212 which is what my C function does. I wrote a function called printdoublebinsci() that prints double-precision floating-point numbers in normalized binary scientific notation. It is based on a call to my function parsedouble(). which isolates the three fields of a double. I declared and defined this function in files I named binsci. h and binsci. c, respectively. Numbers that are not raised to a power are printed with the suffix ldquox 20rdquo. Not-a-number (NaN) and infinity values are not handled. Examples of Usage I wrote a program, called binsciTest. c, that shows some example calls to printdoublebinsci(): I compiled and ran it on both Windows and Linux: On Windows, I built a project in Visual C with files binsci. c, binsci. h, binsciTest. c, rawdouble. c, and rawdouble. h, and compiled and ran it in there. On Linux, I compiled with ldquogcc binsciTest. c binsci. c rawdouble. c - o binsciTestrdquo and then ran it with 8220.binsciTest8221. This is the Windows output (the Linux output is a little different Visual C and gcc differ in some of their decimal to floating-point conversions): Except for 33.75, which is exact, all the other examples are 53 significant bit approximations to the decimal numbers they stand in for (type lsquo0.1rsquo into my decimal to binary converter and see for yourself).

Comments