So stellen Sie 0.148 2 in normalisierte Gleitkomma-Arithmetik mit dem Format (0.148) (0,00100101111) dar. 2 Wir verschieben es 3 Bits nach links, um es normalisieren zu lassen (1.00101111) 2 2. Exponent 1164 (75) (1001011) 2 und Mantisse (01001111) 2. Wenn wir also die denormalisierte Mantisse in ein 8-Bit-Register speichern, dann hat sie die letzten drei 1s nicht gespeichert und dann hätte die Mantisse von (0,00100101) 2 auf (1.00101000) normalisiert. Deutsch: www. tab. fzk. de/de/projekt/zusammenf...ng/ab117.htm. Englisch: www. tab. fzk. de/en/projekt/zusammenf...ng/ab117.htm ) 2 durch Einfügen von 3 0s anstelle von 1s. Die Repräsentation wäre gewesen (0100101100101000) 2 (4B28) Darstellung B Während der Normalisierung berücksichtigt der Prozessor die denormalisierten Mantissenbits über 8 Bits hinaus oder schneidet sie einfach ab, was richtig ist: A oder B Speichert es die Mantisse In Fixpunktdarstellung Wie funktioniert alles? Diese Seite wird aus dem Original mit dem Google Übersetzer übersetzt. IEEE 754 - Standard Binär Arithmetik Float Autor: Yashkardin Vladimirnbsp nbsp softelectro. ru nbsp nbsp 2009-2011 nbsp nbsp nbsp nbsp infosoftelectro. ru 1. Titel Standard. Diese Norm ist die Vereinigung IEEE (Institut für Elektro - und Elektronik-Ingenieure) und wird verwendet, um reale Zahlen (Gleitkomma) im Binärcode darzustellen. Der am meisten verwendete Standard für Gleitkomma, der von vielen Mikroprozessor - und Logikgeräten und Software verwendet wird. Der vollständige Titel des Standards in der Vereinigung IEEE: IEEE-Standard für Binär-Gleitpunkt-Arithmetik (ANSIIEEE Std 754-1985) Titel des Standards in der Internationalen Elektrotechnischen Kommission IEC: IEC 60559: 1989, Binäre Gleitkomma-Arithmetik für Mikroprozessorsysteme (IEC 559: 1989 - die alte Bezeichnung des Standards) Im Jahr 2008 hat der Verein IEEE-Standard IEEE 754-2008 veröffentlicht, zu dem auch der Standard IEEE 754-1985 gehört. 2.Briefbeschreibung des Standards. Die ursprüngliche Ausgabe des Standards: IEEE Standard für Binary Floating-Point Arithmetik nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp Copyright 1985 von The Institute of Electrical and Electronics Engineers, Inc 345 East 47th Street, New York, NY 10017, USA Die Standard enthält 23 Seiten Text in 7 Abschnitten und einem Anhang: 1.Scope 1.1 Implementierungsziele 1.2 Einschlüsse 1.3 Ausschlüsse 2.Definitionen 3.Formate 3.1 Wertemengen 3.2 Grundformate 3.3 Erweiterte Formate 3.4 Kombinationen von Formaten 4.Rounding () 4.1 Round Zu den nächsten 4.2 gerichteten Rundungen 4.3 Rundungspräzision 5.Operationen 5.1 Arithmetik 5.2 Quadratwurzel 5.3 Gleitkomma-Format-Umwandlungen 5.4 Umwandlung zwischen Gleitkomma - und Integer-Formaten 5.5 Runde Gleitkommazahl in Integer-Wert 5.6 Binäre Dezimal-Umwandlung 5.7 Vergleich 6.Infinity, NaNs und signiertes Zero 6.1 Infinity Arithmetik 6.2 Operationen mit NaNs 6.3 Das Sign Bit 7.Exceptions 7.1 Ungültige Operation 7.2 Division durch Zero 7.3 Overflow 7.4 Underflow 7.5 Ungenau 8.Traps 8.1 Trap Handler 8.2 Precedence A. Recommended Functions und Predicates nbsp nbsp nbspUnterweise , Hat sich die IEEE von einer internationalen öffentlichen Ingenieurgesellschaft (die ursprünglich) eine Handelsorganisation entwickelt hat. Diese Organisation besitzt das Urheberrecht, um die Norm IEEE754-1985 zu veröffentlichen. Also, wenn du mit dem ursprünglichen Standard lesen willst, musst du es für ca. 80 kaufen. Das russische Gesetz erlaubt mir jedoch, diesen Standard zu unterrichten. Daher geben die weiteren Ill eine willkürliche Präsentation des Standards und äußern ihre Meinung über sie zu Trainingszwecken. Standard IEEE 754-1985 bestimmt: Als positive und negative Gleitkommazahlen normalisiert werden Wie man die positiven und negativen denormalisierten Gleitkommazahlen repräsentiert Wie man die Zahl der Null darstellt Als ein besonderer Wert, um Unendlichkeit zu repräsentieren (Infiniti) Wie man ein besonderes darstellt Wert von Nr. (NaN oder NaNs) Vier Runden Runden IEEE 754-1985 definiert vier Format für Gleitkommazahlen: Einzelpräzision (einfach präzise) 32-Bit Doppel-Präzision (doppelt präzise) 64-Bit mit Single Erweiterte Präzision (einfach verlängerte Präzision) 43 Bits (selten verwendete) Doppelte Präzision (doppelte Präzision) 79 Bits (typischerweise 80 Bit) 3. Grundbegriffe in der Darstellung von Gleitkommazahlen. 3.1 Einreichung eines normalisierten exponentiellen Formulars Nehmen wir zum Beispiel die Dezimalzahl 155.625 Stellen Sie sich die Zahl in einer normalisierten exponentiellen Form vor: 1.55625872910 2 1.556258729exp 10 2 Zahl 1,556258729exp 10 2 besteht aus zwei Teilen: eine Mantisse M 1.55625 und der Exponent exp 10 2 Wenn die Mantisse liegt im Bereich 1 -2. 3.2 Einreichung einer denormalisierten exponentiellen Form Nehmen wir zum Beispiel die Dezimalzahl 155.625 Stellen Sie sich die Anzahl der denormalisierten exponentiellen Weise vor: 0,155625872910 3 0,1556258729exp 10 3 Anzahl 0,1556258729exp 10 3 besteht aus zwei Teilen: eine Mantisse M 0,155625 und Exponent exp 10 3 Wenn die Mantisse liegt im Bereich 0,1 -3. 3.3 Dezimalzahl in binäre Gleitkommazahl umwandeln. Unser Problem wird auf eine dezimale Gleitkommazahl in binärer Gleitkommazahl in exponentiell normalisierter Form reduziert. Um dies zu tun, erweitern wir die vorgegebene Anzahl von Binärziffern: 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 - die Anzahl der Dezimal - und Binär-Gleitkomma Lassen Sie die resultierende Zahl zur normierten Form im Dezimal - und Binärsystem: 1.556258729exp 10 2 1,00110111018729exp 2 111 Als Ergebnis haben wir die Hauptkomponenten von Das normalisierte Exponential der Binärzahlen: Mantisse M1.0011011101 Exponent exp 2 111 4. Beschreibung Umwandlung von IEEE 754. 4.1 Die Umwandlung einer normalisierten Binärzahlen im 32-Bit-Format IEEE 754 Die Hauptanwendung in Technologie - und Programmierformaten betrug 32 und 64 Bits Zum Beispiel in VB mit den Datentypen Single (32 Bit) und Double (64 Bits). Betrachten Sie die Umwandlung der Binärzahl 10011011.101 Format Einzelpräzision (32 Bit) IEEE Standard 754. Andere Formate der Zahlen in IEEE 754 ist eine vergrößerte Kopie der Einzelpräzision. Um die Nummer im Format einzeln zu geben, sollte IEEE 754 es in die binäre, normalisierte Form bringen. In 3 haben wir diese Umrechnung auf die Nummer 155.625 getan. Betrachten wir nun, da eine normalisierte Binärzahl in ein 32-Bit-Format umgewandelt wird. IEEE 754 Beschreibung der Transformation im 32-Bit-Format IEEE 754: Die Zahl kann oder - sein. Also spielen ein bisschen, um das Zeichen von: 0-positiv 1-negativ zu markieren Diese höchstwertige Bit-zu-32-Bit-Sequenz. Dann gehen Exponent Bits, das gibt 1 Byte (8 Bits). Aussteller kann, wie die Nummer, mit dem Zeichen oder -. Um das Vorzeichen des Exponenten zu bestimmen, um noch kein weiteres Zeichenbit einzuführen, füge den Offset dem Exponenten im Halbbyte 127 (0111 1111) hinzu. Das heißt, wenn unsere Ausstellung 7 (111 in binär), dann verschoben Exponent 7 127 134. Und wenn unsere Aussteller war -7, dann Offset Booths 127-7 120. Biased Exponent ist in den zugeteilten 8 Bits geschrieben. Wenn wir also eine exponentielle Binärzahl erhalten müssen, subtrahieren wir einfach 127 aus diesem Byte. Die restlichen 23 Bits beiseite für die Mantisse. Allerdings ist das normalisierte binäre Mantissen erste Bit immer 1, da die Zahl im Bereich 1 liegt. Die Tabelle zeigt die Dezimalzahl 155.625 im 32-Bit-Format IEEE754: 001 1011 1010 0000 0000 0000 2 971 87761,99584e292 Aus dem obigen, Da der Großteil der Zahlen im IEEE754-Format einen stabilen kleinen relativen Fehler hat: Der maximal mögliche relative Fehler für die Zahl ist Single 2 -23 100 11,920928955078125e-6 Der maximal mögliche relative Fehler für die Anzahl der Double 2 -52 100 2,2204460492503130808472633361816d-14 7.5 Allgemeine Informationen für die Anzahl der Einzel - und Doppelpräzisions-IEEE-Norm 754. Tabelle 3. Informationen zum Format 3264 Bit im Standard ANSI IEEE Std 754-1985 Längenanzahl, Bit-Versatz der Exponential (E), Bits Der Rest der Mantisse (M), Bits denormalisierte Binärzahl normalisierte Binärzahl denormalisierte Anzahl der Dezimalstellen F (-1) S 87292 (E -126) 8729 M2 23 F (-1) S 87292 (E -1022) 8729M2 52 normalisiert Anzahl der Dezimalstellen F (-1) S 87292 (E-127) 8729 (1 M2 23) F (-1) S 87292 (E-1023) 8729 (1M2 52) Abs. Max. Fehlernummer Rel. Max. Fehler-Denormen. Nummer Rel. Max. Fehler Normen. Nummer 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 Rundungsnummern in der Standard-IEEE 754. Bei der Darstellung der Fließkommazahlen im IEEE-Standard 754 haben sich oftmals Zahlen abgerundet. Der Standard bietet vier Möglichkeiten zur Rundung der Zahlen. Wege zur Rundung der Zahlen von IEEE 754: Runden, die zur nächsten Ganzzahl neigen. Die Abrundung tendiert zu Null. Abrunden neigt zu 8734 Rundung neigt zu -8734 Tabelle 3. Beispiele für Rundung auf eine Dezimalstelle bis zur nächsten Ganzzahl Wie wird die Rundung in den Beispielen in Tabelle 3 gezeigt. Wenn Sie eine Zahl umwandeln, um eine der Möglichkeiten der Rundung zu wählen. Standardmäßig ist dies der erste Weg, der auf die nächste Ganzzahl gerundet wird. Oft in verschiedenen Geräten mit der zweiten Methode - abgerundet auf Null. Beim Abrunden auf Null, einfach verwerfen bedeutungslose Level-Nummern, so ist dies die einfachste in der Hardware-Implementierung. 9. Rechenprobleme durch die Verwendung des Standards IEEE754 verursacht. IEEE 754 Standard ist weit verbreitet in Engineering und Programmierung. Die meisten modernen Mikroprozessoren werden mit Hardware-Realisierung von Darstellungen von reellen Variablen im Format von IEEE754 hergestellt. Programmiersprache und Programmierer können diese Situation nicht ändern, eine Ruhe einer reellen Zahl im Mikroprozessor existiert nicht. Bei der Erstellung der Standard-IEEE754-1985 Darstellung einer realen Variablen in Form von 4 oder 8 Bytes scheinen sehr großer Wert, da die Menge an RAM MS-DOS gleich 1 MB war. Ein Programm in diesem System könnte nur 0,64 MB verwendet werden. Für moderne Betriebssysteme ist die Größe von 8 Bytes null und nichtig, dennoch liegen die Variablen in den meisten Mikroprozessoren weiterhin im Format IEEE754-1985. Betrachten Sie die Fehlerberechnung, verursacht durch die Verwendung von Zahlen im Format von IEEE754 9.1 Fehler, die mit der Genauigkeit der Darstellung von reellen Zahlen im Format von IEEE754 verbunden sind. Eine gefährliche Reduktion. Dieser Fehler ist bei Computerrechnungen immer vorhanden. Der Grund für sein Auftreten ist in Absatz 7.4 beschrieben. -6 für doppelte 10 -14 Die absoluten Fehler können signifikant sein, wie für einzelne 10 31 und für doppelte 10 292, die Probleme mit Berechnungen verursachen können. Wenn die Probe auf das Papier zählen, ist die Antwort 1. Absoluter Fehler ist 7. Warum die falsche Antwort bekommen Nummer 123456789 in der Single 4CEB79A3hex (ieee) 123456792 (dec) absolute Fehlerberichterstattung ist 3 Nummer 123456788 in der Single 4CEB79A2hex (ieee) 123456784 (dec) absolute Fehlerberichterstattung ist -4 Relativer Fehler in den Anfangszahlen von ca. 3,24 e-6 Als Ergebnis war ein Operations-Relativfehler des Ergebnisses 800, dh um 2,5 e 8-fach erhöht. Das nenne ich eine gefährliche Reduktion. Dh eine katastrophale Abnahme der Genauigkeit in dem Betrieb, bei dem der absolute Wert des Ergebnisses viel kleiner als irgendeine der Eingangsvariablen ist. In der Tat, die Fehler-Präzision der Darstellung der meisten harmlos in Computer-Berechnungen, und in der Regel viele Programmierer sind keine Aufmerksamkeit. Trotzdem können Sie sehr frustrierend sein. 9.2 Fehler im Zusammenhang mit unsachgemäßem Zwang von Datentypen. Wildfehler Diese Fehler werden durch die Tatsache verursacht, dass die ursprüngliche Zahl im Format von Einzel-und Doppel-in einem Format nicht in der Regel einander gleich gestellt. Zum Beispiel: die ursprüngliche Nummer 123456789,123456789 Single: 4CEB79A3 123456792,0 (dec) Double: 419D6F34547E6B75 123456789,12345679104328155517578125 Der Unterschied zwischen Single und Double Betrag: 2,87654320895671844482421875 Hier ist ein Beispiel für VB: Relative Fehler des Ergebnisses ist: 8734 (Unendlich) Dieser Fehler wird als verschmutzte Null bezeichnet. Wenn die Variablen zum gleichen Typ führen, dann wird dieser Fehler nicht passieren. Daher werden Variablen und Zwischenergebnisse von Berechnungen auf denselben Datentyp gebracht. Zum Beispiel die Anforderung, den gleichen Typ zu zeigen, der in der Standard-C-Sprache nach ISO IEC 9899: 1999 beschrieben ist. Achten Sie auf die Tatsache, dass nicht genug, um nur alle Original-Daten zu einem einzigen Typ zu bringen. Notwendig, die Ergebnisse der Zwischenoperationen auf denselben Typ zu bringen. Hier ist ein Beispiel für einen Fehler im Zwischenergebnis: Hier entsteht der Fehler, weil das Zwischenergebnis von 1 3 in der Zeile c c-1 3 vom Typ double, nicht einzeln ist. Um den Fehler loszuwerden, musst du ein Zwischenergebnis an den Typ des Einzelbetreibers mit dem Cast CSng geben. Ein Beispiel für den Datentyp für GNU C, gesendet von Gregory Sitkarevym: In der zweiten Version können Sie sehen, dass die Teilung der Konstanten im Zwischenergebnis der Art des Schwimmers gegeben wird (Einzelpräzision in C). Diese Optionen wurden mit dem GNU C kompiliert und ausgeführt. Wenn Sie die oben genannten Optionen kompilieren und ausführen, werden die Ergebnisse auf dem VC (Visual Studio) angezeigt. Die Ergebnisse werden umgekehrt. Das heißt, Option 2 wäre das Ergebnis von -9.934108 und Option 1 Ergebnis: 0.000000. Daher kann es enttäuschen, dass das Ergebnis der Berechnungen von der Art und Version des Compilers abhängen kann. In diesem Fall können wir davon ausgehen, dass der VC-Compiler automatisch die Variablentypen angibt und der Versuch, denselben Typ zwangsweise auszuführen, fehlschlägt. Wenn Option 1 (ohne die Besetzung) mit variabler doppelter Genauigkeit (doppelt) zu treffen, dann wird der Fehler nicht bringen Daten und Ergebnis 0.000000 Also in den meisten Fällen, um loszuwerden, die Cast-Daten ist einfach, um den Datentyp doppelt und vergessen Über die Art der Single (Float). Berechnungsfehler, die dadurch verursacht werden, dass sie nicht die Art von Daten, die ich die Wildfehler nenne, wenn sie sich auf die Unkenntnis der Normen und die Theorie der Programmierung beziehen (dh mit schlechter Grundausbildung) 9.3 Fehler, die durch die Verschiebung der Mantisse verursacht werden. Kreisförmige Löcher. Diese Fehler sind mit dem Verlust der Genauigkeit des Ergebnisses in unvollständigen Mantissen Kreuzungszahlen auf der realen Achse verbunden. Wenn sich die Mantissenzahlen nicht auf die reale Achse schneiden, dann ist die Addition und Subtraktion zwischen diesen Zahlen unmöglich. Zum Beispiel nehmen wir die Anzahl der Single: 47FFFFFF 131071,9921875 (dec) Im Binärsystem sieht diese Nummer wie folgt aus: 11111111111111111,1111111 Wir zeigen einige Computeroperationen von Addition und diese Zahl im Format Single Significant Ziffern in der Mantisse der Binärzahl im Format von Single nicht mehr als 24 Rot zeigt die Zahlen jenseits dieser Grenze an und sind nicht im Format Single 1. Addition mit der gleichen Nummer (die Fehlerverschiebung 0.0) beteiligt. 2. Ergänzung zu der Anzahl der kleineren 2-fachen (Fehlerverschiebung - 0.00390625). 3. Addition mit einer kleineren Anzahl von 2 23 mal (Fehlerverschiebung - 0,007812). 4. Addition mit einer kleineren Anzahl von 2 24 mal (Fehlerverschiebung - 0,007812). Im letzteren Fall trennte sich die Mantisse der Zahlen, und arithmetische Operationen mit diesen Zahlen sind bedeutungslos. Wie aus den obigen Beispielen ersichtlich ist, tritt ein Verschiebungsfehler auf, wenn die anfänglichen normalisierten Zahlen ein unterschiedlicher Exponent sind. Wenn sich die Zahlen um mehr als 2 23 (für Einzel) und 2 52 (für Doppel) unterscheiden, dann sind Addition und Subtraktion zwischen diesen Zahlen nicht möglich. Das maximale relative Fehlerergebnis der Operation beträgt etwa 5,96 e-6, was einen relativen Fehler der Darstellung der Zahl nicht übersteigt (S.9.1). Obwohl der relative Fehler hier in Ordnung ist, gibt es noch andere Probleme. Zuerst arbeiten Sie mit Zahlen nur in einem engen Bereich der realen Achse, wo die Mantisse schneiden. Zweitens, für jede Quelle der Grenze einer Schleife namens Cyclic Loch. Lassen Sie mich erklären, wenn es einen Zyklus gibt, in dem die ursprüngliche Zahl der Summe hinzugefügt wird, gibt es eine numerische Grenze für den Betrag für diese Zahl. Das heißt, die Menge, die eine bestimmte Größe erreicht, hört auf zu erhöhen, indem man sie der ursprünglichen Zahl hinzufügt. Hier ist ein Beispiel für ein zyklisches Löcher in der automatischen Steuerung: Es gibt eine pharmazeutische Pflanze, die Tabletten mit einem Gewicht von 10 mg herstellt. Bestehend aus: Umformmaschine, Lagertank von 500 kg, Verpackungsmaschinen, automatische Steuerung. Die Spritzmaschine fördert den Bunker auf jeweils 10 Tabletten. Abfüllmaschine nimmt eine Pille. Die automatische Steuerung berücksichtigt die im Trichter der Formmaschine aufgenommenen und aus den Bunkerverpackungsmaschinen entnommenen Tabletten. Das heißt, es gibt ein Programm, das die Fülltrichterproduktion in kg zeigt. Wenn in der Bunker wird über 500 kg Produkt-Spritzgießmaschine steht auf einer Pause, enthält es den Code in den Bunker werden 200 kg Produkt. Abfüllmaschine zu stoppen, wenn der Bunker ist weniger als 10 Pfund und wird beginnen, wenn der Bunker wird über 100 kg Produkt. Beide Autos können von Zeit zu stoppen, um zu dienen, nicht abhängig von einander (dank dem Bunker). Hier ist ein Beispiel für ein zyklisches Löcher in der automatischen Steuerung: Es gibt eine pharmazeutische Pflanze, die Tabletten mit einem Gewicht von 10 mg herstellt. Bestehend aus: Umformmaschine, Lagertank von 500 kg, Verpackungsmaschinen, wie Sie wissen, funktioniert es in einer Endlosschleife. Angenommen, eine Tagesabfüllmaschine stand zu lange und ein Bunker mit bis zu 300 kg gefüllt. Was passiert, nachdem ich es eingeschaltet habe Ein vereinfachtes Beispiel für das Programmzyklusmanagement: In diesem Beispiel hat die Abfüllmaschine aus dem Trichter 100 kg Produkt aufgenommen und das Gewicht der Produkte im Trichter hat sich nicht verändert. Warum nicht ändern Weil die Mantisse Nummern 300 und 0,00001 disjunktes Format Single. Als nächstes bringen Sie das Gewicht des Formmaschinen-Trichters auf 500 kg und stoppen. Die Abfüllmaschine wird alle Tabletten aus dem Trichter nehmen und auch aufhören. Das Programm zeigt das Gewicht von 500kg im Bunker. Kommen Sie laufen Spezialisten, Testsensoren, Drähte, Computer, und sagen, dass das Programm hing. Aber das Programm hängt nicht, es läuft weiter reibungslos und jeder Check wird das bestätigen. Einfach die Zahl von 0,0001 im zyklischen Loch treffen und daraus hervorgehen kann nicht. Infolgedessen hatten wir Glück, dass es sich um eine pharmazeutische Pflanze handelte, nicht um die Sayan-Shushenskaya GES. In der Tat würde ein erfahrener Programmierer niemals eine zyklische Subtraktion (oder Summation) auf diese Weise machen. Dieses Beispiel ist fiktives Ziel, und so kann man nicht in Betracht ziehen, obwohl in der Mathematik alles makellos ist. Dieser Fehler ist typisch für Mathematiker und Anfänger Programmierer. Ich würde sagen, dass die Hauptarbeit des Programmierers ist, mit Fehlern zu kämpfen, aber nicht in der mathematischen Lösung des Problems. Hier ist ein Beispiel für eine korrekte Lösung für dieses Problem, mit freundlicher Genehmigung von Sitkarevym Gregory: Das vorangehende Beispiel ist aus echtem Industriepaket entnommen. Aus Gründen der Klarheit vereinfachen wir das obige Beispiel. Wie aus diesem Beispiel ersichtlich ist, muss der Programmierer den Fehler des Ergebnisses in jedem Zyklus berechnen, um ihn im nächsten Zyklus zu berücksichtigen. Beachten Sie, dass der Programmierer absolut bereit sein sollte, einige Grundbegriffe der Mathematik in den Berechnungen in einem Format IEEE754 nicht zu erfüllen. Zum Beispiel werden die Regeln der algebraischen Kommutativität (a b) a (a c) b in diesen Berechnungen üblicherweise nicht durchgeführt. Leider, in der heutigen Grundausbildung, die sehr wenig Aufmerksamkeit erhält. 9.4 Fehler durch Rundung. Dirty null Wenn Computerberechnungen zwei Arten von Rundungen unterscheiden können: 1. Das Ergebnis der arithmetischen Operation ist immer abgerundet. 2. Ausgabe und Eingabe einer reellen Zahl in der Box Windows ist abgerundet. Im ersten Fall wird die Variable auf eine von 4 Arten von Rundungen IEEE754 gerundet, die Standardrundung erfolgt auf die nächste Ganzzahl. In diesem Fall erhält die Variable einen neuen gerundeten Wert. In S.9.2 betrachteten wir die Addition von zwei identischen Zahlen: 1. Addition mit der gleichen Zahl (die Fehlerverschiebung 0.0). Hier ist das Ergebnis der Addition von zwei Zahlen absolut genau, aber das Ergebnis wurde durch einen Mikroprozessor abgerundet. So wurde das genaue Ergebnis zum Rundungsfehler hinzugefügt. Im Allgemeinen ist der Rundungsfehler innerhalb der Genauigkeit der Zahlen. Im zweiten Fall ändert die Variable ihre Bedeutung nicht, nur im Windows-Fenster wird der abgerundete Wert der reellen Zahlen angezeigt. Es stellt sich heraus, dass die ursprüngliche Variable und die Anzeige in Windows eine andere Zahl ist. Dies ist nicht die Schuld des Formats IEEE754, das ist ein Fehler Windows. Einzelne Variable wird in den Windows 7 signifikanten Zahlen auf die nächste ganze Zahl gerundet angezeigt. 3DFCD6EA 0,12345679104328155517578125 wird als 0,1234568 angezeigt Für Variablen vom Typ Doppelte zu einer Windows-Box werden 15 signifikante Ziffern auf die nächste ganze Zahl gerundet. 3FBF9ADD3746F67D 0,12345678901234609370352046653351862914860248565673828125 angezeigt, wie ,123456789012346 Die Frage, wie wichtige Variable, wenn wir gehen in die Fenster von Windows 0,123456789012346 Dieser Wert wird auf diese Zahl entspricht: 3FBF9ADD3746F676 0,1234567890123459965590058118323213420808315277099609375 Das heißt, der Wert von 3FBF9ADD3746F67D wir in der Regel nicht direkt einfügen können in Der Programmcode. Aber wir können betrügen und einfügen in die x 0.123456789012346 1 E-16. Die resultierende Variable ist gleich 3FBF9ADD3746F67D (dies wird im Beispiel der verschmutzten Null verwendet) Anzeige oder auf einen PC durch das Fenster ist eine Zahl unmöglich. Als Ergebnis der Aktion entsteht Windows eine Reihe von unangenehmen Situationen. 1. Sie haben keine technische Möglichkeit, die genauen Werte anzuzeigen oder einzugeben. Der Variablen in den Fenstern, die an sich sehr traurig ist. 2. Die Entstehung schwerer Fehler, wie z. B. verschmutzte Null. Dirty Null ist, wenn Sie oder das Programm davon ausgeht, dass die Variable nicht gleich Null ist - Null Sehr oft tritt dieser Fehler in der Schnittstelle des Maschinenbedieners auf. Zum Beispiel nach dem Zurücksetzen des Gewichts von Verpackungsprogrammen. Das Ergebnis des Programms im obigen Beispiel Als Ergebnis ist eine Variable, die der Operator null null annimmt, nicht gleich. Relativer Fehler des Ergebnisses ist unendlich. In den logischen Vergleichsoperationen, die nicht Null sind, kann die Programmausführung zu einem anderen Zweig des Algorithmus umleiten. 9.5 Fehlerrate bei den Normadenorma-Nummern. Die Zahl der Mörder. Diese Fehler treten bei der Arbeit mit Zahlen auf, die sich am Rand der normalisierten denormalisierten Zahlendarstellung befinden. Sie sind mit Unterschieden in der Darstellung von Zahlen im IEEE754-Format verbunden und übertragen die Differenzformeln in IEEE754-Format realen Zahlen. Das heißt, das Gerät (oder die Software) sollte je nach Position einer reellen Zahl in einem Zahlenzeilenformat unterschiedliche Algorithmen verwenden. Darüber hinaus führt es zu einer Komplikation von Geräten und Algorithmen, es gibt noch Unsicherheiten der Übergangszone. Die Unsicherheit der Übergangszone ist, dass der Standard keinen bestimmten Wert der Übergangsgrenze definiert. Im Wesentlichen ist der Übergang Grenze zwischen zwei reellen Zahlen: Die letzte denormalisierter Nummer 000FFFFFFFFFFFFF: Genaue dezimal Wert dieser Zahl: 2,2250738585072008890245868760858598876504231122409594654935248025624400092282356951787758888037591552642309780950 4343120858773871583572918219930202943792242235598198275012420417889695713117910822610439719796040004548973919380791 9893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228631669542910508020181592 6642134996606517803095075913058719846423906068637102005108723282784678843631944515866135041223479014792369585208321 5976210663754016137365830441936037147783553066828345356340050740730401356029680463759185831631242245215992625464943 0083685186171942241764645513713542013221703137049658321015465406803539741790602258950302350193751977303094576317321 0852507299305089761582519159720757232455434770912461317493580281734466552734375e-308 und die erste normalisierte Zahl 0010000000000000: Genaue Dezimalwert dieser Nummer: 2,2250738585072013830902327173324040642192159804623318305533274168872044348139181958542831590125110205640673397310 3581100515243416155346010885601238537771882113077799353200233047961014744258363607192156504694250373420837525080665 0616658158948720491179968591639648500635908770118304874799780887753749949451580451605050915399856582470818645113537 9358049921159810857660519924333521143523901487956996095912888916029926415110634663133936634775865130293717620473256 3178148566435087212282863764204484681140761391147706280168985324411002416144742161856716615054015428508471675290190 3161322778896729707373123334086988983175067838846926092773977972858659654941091369095406136467568702398678315290680 984617210924625396728515625e-308 Da die Grenze eine reelle Zahl ist, kann seine Präzision bis ins Unendliche und digitalen Gerät oder Programm eingestellt werden kann, nicht das Bit für eine Entscheidung zu haben, um etwas Bereich der Anzahl enthalten. Zum Beispiel, ein Fehler 53632 für PHP, die Panik verursacht Anfang 2011 lt htmlgt ltbodygt ltphp d 2.2250738585072011e-308 gt Ende ltbobygt lthtmlgt Geben Sie eine Zahl 2.2250738585072011e-308 verursacht einen Hang des Prozesses mit fast 100 Last CPU. Andere Zahlen aus dieser Reihe von Problemen nicht verursacht (2.2250738585072009e-308, 2.2250738585072010e-308, 2.2250738585072012d-308) Einen Fehler melden 30.12.2010, 10.01.2011 vom Entwickler festgelegt. Da PHP ein Präprozessor ist, wird von den meisten Servern verwendet, dann kann jedes Benutzer-Netzwerk innerhalb von 10 Tagen, konnte jeder Host zu schließen. Wie man den Entwicklern schreibt, dass der Bug nur in 32-Bit-Systemen funktioniert, aber wenn man die Genauigkeit der Grenze erhöht, dann denke ich, dass auch die 64-Bit-Systeme hängen (nicht überprüft). Der Grund für die Panik ist klar: Jeder Benutzer, bei einem gewissen Grad von Sorgfalt und Wissen, hatte die Möglichkeit, die meisten Informationsressourcen des Planeten innerhalb von zehn Tagen zu reduzieren. Ich würde nicht mögen - würde zu mehr Beispielen solcher Zahlen und solcher Fehler führen. 10 Der letzte Teil Aus dem obigen ist klar, dass die Ansicht, dass das Gleitkomma-Ergebnis nicht über den relativen Fehler bei der Meldung der größten Zahl hinausgeht, falsch ist. Fehler, die in Punkt 9 aufgeführt sind, werden zusammen addiert. Solche Fehler wie verschmutzte und gefährliche Nullreduktion können Rechenfehler inakzeptabel machen. Besondere Aufmerksamkeit bei der Programmierung von Computer-Berechnungen sollte der Programmierer auf die Ergebnisse nahe Null gezahlt werden. Einige Experten glauben, dass das Format der Zahlen eine Bedrohung für die Menschheit darstellt. Sie können darüber lesen in dem Artikel IEEE754-Tick bedroht die Menschheit Obwohl viele der Fakten in diesem Artikel über-dramatisiert und möglicherweise falsch interpretiert, aber das Problem ist die Berechnung korrekt reflektiert philosophisch. Im nicht eine Dramatisierung der Berechnungen auf dem Standard IEEE754. Standardbetrieb seit 1985 und vollständig in die Norm IEEE754-2008 eingegeben, die die Genauigkeit der Berechnungen erweitert hat. Allerdings ist das Problem der Zuverlässigkeitsrechnen heute sehr dringend, und die Standard-IEEE754-2008 und ISO-Empfehlungen haben dieses Problem nicht gelöst. Ich denke, in diesem Bereich brauchte eine innovative Idee, dass Entwickler Standard IEEE754-2008 leider nicht besitzen. Innovative Ideen kommen in der Regel aus. Die wichtigsten innovativen Ideen in unserer Welt wurden von Amateuren gemacht (Gleichgesinnte nicht für Geld). Ein auffallendes Beispiel für diese Situation war die Erfindung des Telefons. Als ein Schullehrer Alexander Graham Bell (Alexander Graham Bell) ein Patent für eine Erfindung des Telefons an den Präsidenten des Telekommunikationsunternehmens Western Union Company, das im Besitz der transatlantischen Kabelverbindung mit einem Angebot zum Kauf seines Patents für die Erfindung des Telefons, er wurde nicht vertrieben - nein Der Präsident dieses Unternehmens bot an, diese Frage den Rat von Experten auf dem Gebiet der Telegraphie zu betrachten, bestehend aus Spezialisten und Wissenschaftlern im Bereich der Telekommunikation. Experten gaben ihre Meinung, dass diese Erfindung auf dem Gebiet der Telekommunikation nutzlos ist und es ist zwecklos. Einige Experten haben sogar einen Bericht geschrieben, dass es tsirkachestvo und Scharlatanismus nbsp nbsp Alexander Graham Bell, zusammen mit seinem Schwiegervater, entschieden sich unabhängig, um seine Erfindung zu fördern. Nach etwa 10 Jahren wurde die Telekommunikations-Riese Western Union Co. praktisch eliminiert Telefon Geschäft aus der Sphäre der Telekommunikation Technologien. Heute können Sie in vielen russischen Städten Fenster, die Western Union, diese Firma, die in der Übertragung von Geld auf der ganzen Welt engagiert ist, und einmal war sie der internationale Telekommunikations-Riese. Wir können schließen: Meinungen von Experten in innovativen Technologien sind nutzlos Wenn Sie denken, dass seit der Erfindung des Telefons (1877) in den Völkern Gedanken, dass etwas geändert hat, sind Sie falsch. Wenn Wissenschaftler (die neu erfinden) und Fachleute (die wissen, wie man das bekannte benutzt) das Problem nicht lösen kann, braucht man Innovation. Links zu neuen Ideen auf dem Gebiet der Darstellung von realen Zahlen in der Hardware: 1. Approksimetika 2. Wenn Sie andere innovative Ideen im Bereich der Repräsentationen von realen Zahlen kennen, dann werden wir gerne Links zu diesen Quellen bekommen. Ich würde vorschlagen, reale Zahlen als Fixpunkt darzustellen. Um den vollen Bereich der Zahlen doppelt genug zu sehen, um eine Variable zu haben, die aus 1075 Bits ganzzahligem Teil und 1075 Bits Bruchteil besteht, dh etwa 270 Bytes pro Variable. In diesem Fall werden alle Zahlen mit der gleichen absoluten Genauigkeit dargestellt. Sie können mit Zahlen im ganzen Bereich die reale Achse arbeiten, das heißt, es wird möglich, eine große Anzahl von kleinen Zahlen zusammenzufassen. Schrittnummern auf der realen Achse ist einheitlich, das ist die reale Achse ist linear. Der Datentyp wird nur einer sein, dh brauchen nicht die ganze, echte und andere Typen. Hier ist das Problem die Realisierung von Registern der Mikroprozessoren Dimension von 270 Bytes, aber es ist kein Problem für moderne Technologie. Um p.9 zu schreiben, musste ich ein Programm erstellen, das eine Zahl als Variable zu einem festen Punkt darstellt, lange 1075.1075 Bytes. Wo die Zahl als Zeichenfolge von Zeichen ASCII dargestellt werden kann, dh ein Symbol entspricht einer Ziffer. Ich musste alle arithmetischen Operationen mit Strings ASCII schreiben. Dieses Programm ähnelt einer Papierberechnung. Da mathematische Fähigkeit Mikroprozessor in ihm nicht verwendet wird, sagte sie langsam. Warum ich es getan habe, konnte ich kein Programm finden, das genau die Anzahl des IEEE754-Formats in Dezimalform darstellen könnte. Ich habe auch nicht gefunden, das Programm (obwohl sie sicherlich haben, was ohne Zweifel), wo Sie in Feld 1075 von signifikanten Dezimalstellen eingeben können. Hier zum Beispiel nur der Dezimalwert der Anzahl der Doppel 7FEFFFFFFFFFFFFF: 17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955 863276687817154045895351438246423432132688946418276846754670353751698604991057655128207624 549009038932894407586850845513394230458323690322294816580855933212334827479782620414472316 8738177180919299881250404026184124858368,0 Sie können die IEEE754 v.1.0 nbsp verwenden zu studieren und die Fehler zu bewerten, wenn sie mit reellen Zahlen gegeben im Format von IEEE754 arbeiten. Referenzen: 1. IEEE-Standard für Binär-Gleitpunkt-Arithmetik. Copyright 1985 von The Institute of Electrical and Electronics Engineers, Inc 345 East 47th Street, New York, NY 10017, USA Danksagungen: Sitkarevu Grigory (sitkarevkomitex. ru, sinclair80gmail). Für die Hilfe bei der Erstellung eines Artikels. Archiv der Rezensionen mit Kommentaren nbsp View nbspnbsp (Senden Sie uns Feedback zu der E-Mail: infosoftelectro. ru) Binäre Konvertierungshinweise Diese Hinweise enthalten mehr Informationen als für MGF 1107 erforderlich. MGF 1107 Studenten können alles über binäre Fraktionen, die binäre Version ignorieren Der wissenschaftlichen Notation, und hexadezimale Zahlen beim Lesen, was folgt. Wir verwenden nur binäre Ganzzahlen in MGF 1107. Binär auf Dezimal-Konvertierung Dies geschieht durch Anwenden der Definition der Platzwerte für eine Binärzahl, Auswertung jeder in Basis zehn. Zum Beispiel konvertieren wir 1001 zwei von binär nach dezimal wie folgt: das ist 9 zehn. Die meisten Menschen finden dies die einfachste der beiden Conversions. Fraktionen werden mit negativen Exponenten für jeden gebrochenen Platzwert behandelt, genau wie bei Dezimalzahlen, so dass wir 0.11 zwei von Binär zu Dezimal umwandeln, indem wir erkennen, dass es 0,75 zehn gibt. MGF 1107 Hausaufgaben enthalten keine Beispiele mit binären Fraktionen. Dezimal-zu-Binär-Konvertierung Der Integer-Teil wird von rechts nach links durch wiederholte Division durch zwei (die den Binärpunkt nach links verschiebt) erhalten, wobei der Rest als die nächste Binärziffer gehalten wird und der Integer-Quotient für den nächsten Schritt verwendet wird . Wir stoppen, wenn der Quotient Null ist. (Der einfachste Weg, um den Integer-Teil zu erhalten, ist, die Hex-Umwandlungsfunktion eines Taschenrechners zu verwenden und hexadezimal in Binär umzuwandeln, aber wir verwenden keine Rechner in diesem Gerät.) Der Bruchteil wird von links nach rechts erhalten Wiederholte Multiplikation mit zwei (die den Binärpunkt nach rechts verschiebt), wobei der Integer-Teil als die nächste Binärziffer gehalten wird und der Bruchteil für den nächsten Schritt verwendet wird. Es gibt keine einfachen Verknüpfungen für den Bruchteil, aber schaue auf irgendwelche Wiederholungsmuster. Wir können das Ergebnis als normalisierte Gleitkomma-Binärzahl mit der Konvention schreiben, dass die Mantisse (die Bedeutung) zwischen 1 und 2 liegt - das heißt, die Mantisse ist von der Form 1.ffffff. 1. Umwandeln Sie 11 Zehn in Binär: Die Ganzzahl wird umgerechnet und ist 1011 zwei. (Dies ist 1.011 x 2 3 als normalisierte Gleitkommazahl.) 2. Konvertieren Sie 5,75 Zehn in Binär: Der Integer-Teil wird gefunden und ist 101 zwei. Der Bruchteil wird gefunden, so ist die Zahl 101.11 zwei. (Dies ist 1.0111 x 2 2 als normalisierte Gleitkommazahl.) 3. Konvertieren Sie 0,1 Zehn in Binär: Der Bruchteil wird gefunden, so dass die Zahl 0.0001100110011 ist. Zwei (Dies ist 1.10011001 x 2 -4 als normalisierte Gleitkommazahl.) Hexadezimalzahlen Dezimal - Hexadezimal - Binärtabelle Weg zurück in den 1950er Jahren wurde der ILLIAC an der Universität von Illinois (Urbana-Champaign) mit dem Sexadezimal gebaut Zahlensystem. Sie zählten jedoch. 8, 9, K, S, N, J, F, L anstatt zu verwenden. 8, 9, A, B, C, D, E, F wie wir heute tun. Sie wählten diese Briefe (die an die Mnemotechnik gebunden wurden), weil sie die bequemsten waren, wenn sie einen Teletyp umwandelten, um für das Stanzen des für IO verwendeten Papiers verwendet zu werden. (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).
No comments:
Post a Comment