Saturday 4 November 2017

Floating Point Notation Binary Options


Die Wissenschaftler und Ingenieure Leitfaden für digitale Signalverarbeitung Von Steven W. Smith, Ph. D. Kapitel 28: Digitale Signalprozessoren Feste und Gleitpunkt Digitale Signalverarbeitung kann in zwei Kategorien, Fixpunkt und Gleitpunkt unterteilt werden. Diese beziehen sich auf das Format zur Speicherung und Manipulation von Nummern innerhalb der Geräte. Fixpunkt-DSPs stellen üblicherweise jede Zahl mit mindestens 16 Bits dar, obwohl eine andere Länge verwendet werden kann. Zum Beispiel stellt Motorola eine Familie von Fixpunkt-DSPs her, die 24 Bits verwenden. Es gibt vier gängige Wege, dass diese 2 16 65536 möglichen Bitmuster eine Zahl darstellen können. In unsigned Integer. Kann die gespeicherte Zahl einen beliebigen Integer-Wert von 0 bis 65.535 annehmen. In ähnlicher Weise verwendet signierte Ganzzahl zwei Komplemente, um den Bereich negative Zahlen von -32.768 bis 32.767 anzugeben. Mit der nicht unterzeichneten Fraktionsnotation sind die 65536 Level gleichmäßig zwischen 0 und 1 verteilt. Schließlich erlaubt das signierte Fraktionsformat negative Zahlen, die gleichmäßig zwischen -1 und 1 beabstandet sind. Im Vergleich dazu verwenden Gleitkomma-DSPs typischerweise ein Minimum von 32 Bits, um jedes zu speichern Wert. Dies führt zu vielen weiteren Bitmustern als für festen Punkt, 2 32 4.294.967.296 genau zu sein. Ein wesentliches Merkmal der Gleitpunktnotation ist, dass die dargestellten Zahlen nicht gleichmäßig beabstandet sind. In dem gängigsten Format (ANSI / IEEE Std. 754-1985) sind die größten und kleinsten Zahlen plusmn3,4 × 10 38 und 1,210 -38. beziehungsweise. Die dargestellten Werte sind in ungleichem Abstand zwischen diesen beiden Extremen, so dass der Abstand zwischen zwei beliebigen Zahlen etwa zehn Millionen mal kleiner ist als der Wert der Zahlen. Dies ist wichtig, weil es große Lücken zwischen großen Zahlen, aber kleine Lücken zwischen kleinen Zahlen. Gleitkomma-Notation wird in Kapitel 4 näher erläutert. Alle Gleitkomma-DSPs können auch Fixpunktnummern behandeln, die Notwendigkeit, Zähler, Schleifen und Signale aus dem ADC zu implementieren und zum DAC zu gehen. Allerdings bedeutet dies nicht, dass Festkomma-Mathematik so schnell ausgeführt wird wie die Gleitkomma-Operationen es hängt von der internen Architektur. Beispielsweise sind die SHARC-DSPs für Fließkomma - und Fixpunktoperationen optimiert und führen sie mit gleicher Effizienz aus. Aus diesem Grund werden die SHARC-Geräte oft als 32-Bit-DSPs bezeichnet und nicht nur als Floating Point. Abbildung 28-6 zeigt die primären Kompromisse zwischen Fest - und Gleitpunkt-DSPs. In Kapitel 3 betonten wir, dass Fixpunktarithmetik viel schneller als Gleitpunkt in Allzweckcomputern ist. Jedoch mit DSPs ist die Geschwindigkeit ungefähr die selbe, ein Ergebnis der Hardware, die für Mathebetriebe stark optimiert wird. Die interne Architektur eines Gleitkomma-DSP ist komplizierter als bei einem Fixpunktgerät. Alle Register und Datenbusse müssen 32 Bits breit sein anstatt nur 16 der Multiplikator und ALU muss in der Lage sein, schnell eine Gleitpunktarithmetik durchzuführen, der Befehlssatz muss grßer sein (damit sowohl Floating - als auch Fixpunktnummern verarbeitet werden können) bald. Der Gleitpunkt (32 Bit) hat eine bessere Genauigkeit und einen höheren Dynamikbereich als der feste Punkt (16 Bit). Darüber hinaus haben Gleitkommaprogramme oft einen kürzeren Entwicklungszyklus, da der Programmierer generell keine Sorgen um Probleme wie Überlauf, Unterlauf und Rundungsfehler machen muss. Andererseits sind Festpunkt-DSPs herkömmlicherweise billiger als Gleitkomma-Vorrichtungen. Nichts ändert sich schneller als der Preis der Elektronik alles, was Sie in einem Buch finden wird veraltet sein, bevor es gedruckt wird. Dennoch sind die Kosten ein wichtiger Faktor für das Verständnis, wie DSPs entwickelt werden, und wir müssen Ihnen eine allgemeine Idee geben. Als dieses Buch 1999 fertiggestellt wurde, wurden Festpunkt-DSPs zwischen 5 und 100 verkauft, während Gleitkomma-Vorrichtungen im Bereich von 10 bis 300 liegen. Dieser Unterschied in den Kosten kann als ein Maß für die relative Komplexität zwischen den Vorrichtungen angesehen werden. Wenn Sie herausfinden möchten, was die Preise heute sind. Müssen Sie heute aussehen. Jetzt können wir unsere Aufmerksamkeit auf die Leistung, was kann ein 32-Bit-Gleitkomma-System tun, dass ein 16-Bit-Fixpunkt cant Die Antwort auf diese Frage ist Signal-Rausch-Verhältnis. Angenommen, wir speichern eine Zahl in einem 32-Bit-Gleitkommaformat. Wie bereits erwähnt, beträgt die Lücke zwischen dieser Zahl und ihrem benachbarten Nachbar etwa ein zehn Millionstel des Wertes der Zahl. Um die Zahl zu speichern, muss sie um die Hälfte der Spaltgröße auf - oder abgerundet sein. Mit anderen Worten, jedes Mal, wenn wir eine Zahl in Gleitkommazahlen speichern, addieren wir Rauschen zum Signal. Dasselbe geschieht, wenn eine Zahl als 16-Bit-Festkommawert gespeichert wird, mit der Ausnahme, dass das hinzugefügte Rauschen viel schlechter ist. Das ist, weil die Lücken zwischen benachbarten Zahlen sind viel größer. Angenommen, wir speichern die Zahl 10.000 als eine signierte Ganzzahl (von -32.768 bis 32.767). Der Abstand zwischen den Zahlen ist ein Zehntausendstel des Wertes der Zahl, die wir speichern. Wenn wir die Zahl 1000 speichern wollen, beträgt die Lücke zwischen den Zahlen nur ein Tausendstel des Wertes. Lärm in Signalen wird üblicherweise durch seine Standardabweichung dargestellt. Dies wurde ausführlich in Kapitel 2 diskutiert. Hier ist die wichtige Tatsache, dass die Standardabweichung dieses Quantisierungsrauschens etwa ein Drittel der Spaltgröße beträgt. Dies bedeutet, dass das Signal-Rausch-Verhältnis für die Speicherung einer Gleitkommazahl etwa 30 Millionen bis eins beträgt, während für eine Festkommazahl nur etwa zehntausend bis eins beträgt. Mit anderen Worten, Gleitkomma hat etwa 30.000 Mal weniger Quantisierungsrauschen als Fixpunkt. Dies stellt eine wichtige Weise dar, dass DSPs von herkömmlichen Mikroprozessoren verschieden sind. Angenommen, wir implementieren einen FIR-Filter im festen Punkt. Dazu schleifen wir jeden Koeffizienten durch, multiplizieren ihn mit dem entsprechenden Sample aus dem Eingangssignal und addieren das Produkt zu einem Akkumulator. Heres das Problem. In herkömmlichen Mikroprozessoren ist dieser Akkumulator nur eine weitere 16-Bit-Fixpunktvariable. Um Überlauf zu vermeiden, müssen wir die zu addierenden Werte skalieren und entsprechend Quantisierungsrauschen bei jedem Schritt hinzufügen. Im schlimmsten Fall wird dieses Quantisierungsrauschen einfach addieren, was das Signal-Rausch-Verhältnis des Systems stark senkt. Beispielsweise kann bei einem FIR-Filter mit 500 Koeffizienten das Rauschen bei jeder Ausgangsabtastung das 500-fache des Rauschens auf jeder Eingangsabtastung sein. Das Signal-zu-Rauschen-Verhältnis von Zehntausend zu Einem ist zu einem schauerlichen Zwanzig auf Eins gefallen. Obwohl dies ein Extremfall ist, zeigt es den Hauptpunkt: Wenn viele Operationen an jeder Probe durchgeführt werden, ist es schlecht, wirklich schlecht. Siehe Kapitel 3 für weitere Details. DSPs behandeln dieses Problem mit einem erweiterten Präzisionsakkumulator. Dies ist ein spezielles Register, das 2-3 mal so viele Bits hat wie die anderen Speicherplätze. Beispielsweise kann sie in einem 16-Bit-DSP 32 bis 40 Bits aufweisen, während sie in den SHARC-DSPs 80 Bits für die Festkomma-Verwendung enthält. Dieser erweiterte Bereich eliminiert während der Akkumulation praktisch kein Rundungsgeräusch. Der einzige abgerundete Fehler ist, wenn der Akkumulator skaliert und im 16-Bit-Speicher gespeichert wird. Diese Strategie funktioniert sehr gut, obwohl sie begrenzt, wie einige Algorithmen durchgeführt werden müssen. Im Vergleich dazu hat der Gleitkommawert ein derart geringes Quantisierungsrauschen, daß diese Techniken gewöhnlich nicht notwendig sind. Zusätzlich zu einem niedrigeren Quantisierungsrauschen sind auch Gleitkommasysteme einfacher, Algorithmen zu entwickeln. Die meisten DSP-Verfahren basieren auf wiederholten Multiplikationen und Hinzufügungen. Im Fixpunkt muss nach jedem Betrieb die Möglichkeit eines Überlaufs oder Unterlaufs berücksichtigt werden. Der Programmierer muss ständig die Amplitude der Zahlen verstehen, wie sich die Quantisierungsfehler akkumulieren und welche Skalierung stattfinden muss. Im Vergleich dazu treten diese Fragen nicht im Gleitkomma auf, die sich die Zahlen selbst versorgen (außer in seltenen Fällen). Um Ihnen ein besseres Verständnis dieses Problems zu vermitteln, 28-7 zeigt eine Tabelle aus dem SHARC-Benutzerhandbuch. Dies beschreibt die Art und Weise, wie die Multiplikation sowohl für Fest - als auch Gleitkommaformate durchgeführt werden kann. Zuerst schauen Sie, wie Gleitkommazahlen multipliziert werden können, es gibt nur einen Weg, Fn Fx Fy, wobei Fn, Fx und Fy eines der 16 Datenregister sind. Es könnte nicht einfacher sein. Vergleiche dazu alle möglichen Befehle zur Fixpunktvervielfachung. Dies sind die vielen Möglichkeiten, um die Probleme von Round-off, Skalierung und Format effizient zu behandeln. In Fig. 28-7, Rn, Rx und Ry beziehen sich auf eines der 16 Datenregister, und MRF und MRB sind 80-Bit-Akkumulatoren. Die vertikalen Linien weisen auf Optionen hin. Beispielsweise bedeutet der Eintrag oben links in dieser Tabelle, dass alle folgenden gültigen Befehle sind: Rn Rx Ry, MRF Rx Ry und MRB Rx Ry. Mit anderen Worten, der Wert von zwei Registern kann multipliziert und in ein anderes Register oder in einen der erweiterten Präzisionsakkumulatoren gebracht werden. Diese Tabelle zeigt auch, dass die Zahlen entweder signiert oder unsigned (S oder U) sein können und können gebrochen oder ganzzahlig (F oder I) sein. Die Optionen RND und SAT sind Möglichkeiten zur Steuerung von Rundung und Registerüberlauf. Es gibt andere Details und Optionen in der Tabelle, aber sie sind nicht wichtig für unsere gegenwärtige Diskussion. Die wichtige Idee ist, dass die Fixpunkt-Programmierer müssen verstehen, Dutzende von Möglichkeiten zur Durchführung der grundlegenden Aufgabe der Multiplikation. Im Gegensatz dazu kann der Gleitkommaprogrammierer seine Zeit darauf konzentrieren, sich auf den Algorithmus zu konzentrieren. Angesichts dieser Kompromisse zwischen festen und gleitenden Punkt, wie wählen Sie, welche zu verwenden Hier sind einige Dinge zu beachten. Betrachten Sie zunächst, wie viele Bits im ADC und DAC verwendet werden. In vielen Anwendungen sind 12-14 Bits pro Probe der Crossover für die Verwendung von festem und fließendem Punkt. Zum Beispiel verwenden Fernseh - und andere Videosignale typischerweise 8-Bit-ADC und - DAC, und die Genauigkeit des festen Punktes ist akzeptabel. Im Vergleich dazu können professionelle Audioanwendungen mit bis zu 20 oder 24 Bits abgespielt werden, und fast sicher brauchen Gleitkomma, um den großen Dynamikbereich zu erfassen. Das nächste, was zu betrachten ist die Komplexität des Algorithmus, der ausgeführt wird. Wenn es relativ einfach ist, denken Sie festen Punkt, wenn es komplizierter ist, denke Fließkomma. Zum Beispiel erfordern FIR-Filterung und andere Operationen im Zeitbereich nur ein paar Dutzend Zeilen Code, wodurch sie für einen festen Punkt geeignet sind. Im Gegensatz dazu sind Frequenzdomänenalgorithmen, wie Spektralanalyse und FFT-Faltung, sehr detailliert und können viel schwieriger programmiert werden. Während sie in festen Punkt geschrieben werden können, wird die Entwicklungszeit stark reduziert werden, wenn Gleitkomma verwendet wird. Schließlich über das Geld denken: wie wichtig sind die Kosten des Produkts, und wie wichtig sind die Kosten der Entwicklung Wenn Fixpunkt gewählt wird, werden die Kosten des Produkts reduziert werden, aber die Entwicklungskosten werden wahrscheinlich höher sein, aufgrund von Die schwierigeren Algorithmen. In umgekehrter Weise führt der Gleitkommawert im allgemeinen zu einem schnelleren und billigeren Entwicklungszyklus, jedoch zu einem teureren Endprodukt. Abbildung 28-8 zeigt einige der Haupttrends bei DSPs. Abbildung (a) zeigt die Auswirkungen, die digitale Signalprozessoren auf den Embedded-Markt hatten. Dies sind Anwendungen, die einen Mikroprozessor verwenden, um direkt ein größeres System, wie z. B. ein Mobiltelefon, einen Mikrowellenofen oder eine Automobilinstrumentanzeigetafel, zu betreiben und zu steuern. Der Name Mikrocontroller wird oft in Bezug auf diese Geräte verwendet, um sie von den Mikroprozessoren in Personalcomputern verwendet zu unterscheiden. Wie in (a) gezeigt, haben etwa 38 der eingebetteten Designer bereits mit der Verwendung von DSPs begonnen, und weitere 49 betrachten den Schalter. Der hohe Durchsatz und die Rechenleistung von DSPs machen sie oft zu einer idealen Wahl für eingebettete Designs. Wie in (b) dargestellt, verwenden etwa doppelt so viele Ingenieure Fixpunkt als Gleitkomma-DSPs. Dies hängt jedoch stark von der Anwendung ab. Festpunkt ist in wettbewerbsfähigen Konsumgütern populärer, wo die Kosten der Elektronik sehr niedrig gehalten werden müssen. Ein gutes Beispiel dafür sind Mobiltelefone. Wenn Sie im Wettbewerb sind, um Millionen von Ihrem Produkt zu verkaufen, kann ein Kostenunterschied von nur ein paar Dollar der Unterschied zwischen Erfolg und Misserfolg sein. Im Vergleich dazu ist der Gleitkommawert häufiger, wenn eine höhere Leistung benötigt wird und Kosten nicht wichtig sind. Angenommen, Sie entwerfen ein medizinisches Bildgebungssystem, einen solchen Computertomographen. Nur wenige hundert Modelle werden je zu einem Preis von mehreren hunderttausend Dollar verkauft. Für diese Anwendung sind die Kosten des DSP unwesentlich, aber die Leistung ist kritisch. Trotz der größeren Anzahl von Fixpunkt-DSPs ist der Gleitkommamarkt das am schnellsten wachsende Segment. Wie in (c) gezeigt, planen mehr als die Hälfte der Ingenieure, die 16-Bits-Geräte verwenden, in naher Zukunft auf einen Gleitkommawert zu migrieren. Bevor wir dieses Thema verlassen, sollten wir reemphasize, dass Gleitkomma und Fixpunkt normalerweise 32 Bits und 16 Bits, aber nicht immer verwenden. Beispielsweise kann die SHARC-Familie Zahlen im 32-Bit-Fixpunkt repräsentieren, was bei digitalen Audioanwendungen üblich ist. Dies macht die 2 32-Quantisierungsstufen gleichmäßig über einen relativ kleinen Bereich, beispielsweise zwischen -1 und 1, beabstandet. Im Vergleich dazu legt die Gleitpunktnotation die 2 32-Quantisierungspegel logarithmisch über einen großen Bereich, typischerweise plusmn3,4 × 10 38, fest - Bit Festpunkt bessere Präzision. Das heißt, der Quantisierungsfehler auf irgendeinem Abtastwert ist niedriger. Allerdings hat 32-Bit-Gleitkommazahl einen höheren Dynamikbereich. Dh es gibt einen größeren Unterschied zwischen der größten Zahl und der kleinsten Zahl, die dargestellt werden kann. Floating point Bei der Berechnung beschreibt Gleitkommazahl ein System für die numerische Darstellung, in dem eine Zeichenkette von Ziffern (oder Bits) eine rationale Zahl darstellt. Der Begriff Gleitkomma bezieht sich auf die Tatsache, dass der Radixpunkt (Dezimalpunkt, oder häufiger in Computern, binärer Punkt) schwimmen kann, dh er kann irgendwo relativ zu den signifikanten Ziffern der Zahl platziert werden. Diese Position wird separat in der internen Darstellung angezeigt, und die Gleitkomma-Darstellung kann somit als Computerrealisierung der wissenschaftlichen Notation betrachtet werden. Im Laufe der Jahre wurden mehrere verschiedene Gleitkomma-Darstellungen in Computern verwendet, jedoch ist in den letzten zehn Jahren die am häufigsten angetroffene Darstellung diejenige, die durch den IEEE-754-Standard definiert ist. Der Vorteil der Gleitkomma-Darstellung über die Festpunkt - (und ganzzahlige) Darstellung ist, dass sie einen viel breiteren Bereich von Werten unterstützen kann. Beispielsweise kann eine Festkomma-Darstellung, die sieben Dezimalstellen hat, wobei der Dezimalpunkt nach der fünften Stelle positioniert werden soll, die Zahlen 12345,67, 8765,43, 123,00 usw. darstellen, während eine Gleitkomma-Darstellung (wie z Das IEEE 754 decimal32-Format) mit sieben Nachkommastellen könnte zusätzlich 1.234567, 123456.7, 0,00001234567, 1234567000000000 und so weiter darstellen. Das Gleitkommaformat braucht etwas mehr Speicherplatz (um die Position des Radixpunktes zu kodieren), so daß Gleitkommazahlen, wenn sie in demselben Raum gespeichert sind, ihre grßere Reichweite auf Kosten von etwas geringerer Genauigkeit erreichen. Die Geschwindigkeit von Gleitkommaoperationen ist ein wichtiges Maß für die Leistung von Computern in vielen Anwendungsbereichen. Es wird in FLOPS gemessen. Weltklasse-Supercomputer-Anlagen werden in der Regel in Teraflops bewertet. Im Juni 2008 erreichte der IBM Roadrunner Supercomputer 1.026 Petaflops oder 1.026 Quadrillion Gleitkommaoperationen pro Sekunde. Im November 2008 wurde Oak Ridge National Laboratorys Cray XT Jaguar Supercomputer aktualisiert, um eine theoretische Höchstrechenleistung von 1,64 Petaflops zu treffen, was Jaguar zum weltweit ersten Petaflop-System machte, das sich der Forschung widmet. Eine Zahlenrepräsentation (in der Mathematik als numerisches System bezeichnet) legt eine Art der Speicherung einer Zahl fest, die als Ziffernfolge codiert werden kann. Die Arithmetik ist definiert als ein Satz von Aktionen auf der Repräsentation, die klassische arithmetische Operationen simulieren. Es gibt mehrere Mechanismen, mit denen Zeichenfolgen Zahlen darstellen können. In der üblichen mathematischen Notation kann die Ziffernfolge beliebig lang sein und der Ort des Radixpunktes wird durch Platzieren eines expliziten Punktzeichens (Punkt oder Komma) angezeigt. Wenn der Radixpunkt weggelassen wird, wird implizit angenommen, dass er am rechten (am wenigsten signifikanten) Ende des Strings liegt (das heißt, die Zahl ist eine ganze Zahl). In Festkommasystemen wird eine spezifische Annahme gemacht, wo sich der Radixpunkt in der Zeichenkette befindet. Zum Beispiel könnte die Konvention sein, dass die Zeichenfolge aus 8 Dezimalstellen mit dem Dezimalpunkt in der Mitte besteht, so dass 00012345 einen Wert von 1.2345 hat. In der wissenschaftlichen Notation wird die gegebene Zahl durch eine Potenz von 10 skaliert, so dass sie innerhalb eines bestimmten Bereichs liegt, typischerweise zwischen 1 und 10, wobei der Radixpunkt unmittelbar nach der ersten Ziffer erscheint. Der Skalierungsfaktor wird dann als Zehnerpotenz am Ende der Zahl separat angezeigt. Zum Beispiel ist die Revolutionsperiode von Jupiters Mond Io 152853.5047 Sekunden. Dies ist in der Standardform wissenschaftlichen Notation als 1.528535047 Sekunden dargestellt. Die Gleitpunktdarstellung ist im Konzept der wissenschaftlichen Notation ähnlich. Logischerweise besteht eine Gleitkommazahl aus einer signierten Ziffernfolge einer gegebenen Länge in einer gegebenen Basis (oder einer Radix). Dies ist bekannt als die Bedeutung und manchmal die Mantisse (siehe unten) oder Koeffizient. Der Radixpunkt ist nicht explizit eingeschlossen, sondern es wird implizit angenommen, daß er immer in einer bestimmten Position innerhalb der Bedeutung und oft erst nach oder kurz vor der höchstwertigen Stelle oder rechts neben der rechten Ziffer liegt. Dieser Artikel wird in der Regel folgen die Konvention, dass der Radix-Punkt ist nur nach der bedeutendsten (ganz links) Ziffer. Die Länge des Signals bestimmt die Genauigkeit, mit der Zahlen dargestellt werden können. Ein ganzzahliger Integer-Exponent. Auch bezeichnet als das Merkmal oder die Skalierung, die die Größe der Zahl modifiziert. Die Bedeutung wird multipliziert, indem die Basis auf die Kraft des Exponenten angehoben wird. Was dem Verschieben des Radixpunktes von seiner implizierten Position um eine Anzahl von Stellen gleich dem Wert des Exponentes nach rechts entspricht, wenn der Exponent positiv oder nach links ist, wenn der Exponent negativ ist. Die Zahl 152853.5047, die zehn Dezimalstellen der Genauigkeit hat, wird mit der Basis-10 (die vertraute Dezimaldarstellung) als Beispiel dargestellt und mit einem Exponenten von 5 (wenn die implizierte Position des Radixpunktes nach der Erste höchstwertige Stelle, hier 1). Um den Istwert wiederherzustellen, wird ein Dezimalpunkt nach der ersten Ziffer des Signals platziert und das Ergebnis mit 10 5 multipliziert, um 1,528535047 10 5 oder 152853,5047 zu ergeben. Symbolisch ist dieser Endwert, wobei s der Wert der Bedeutung und (nach Berücksichtigung des implizierten Radixpunktes) ist, b die Basis und e der Exponent ist. Äquivalent ist dies: wobei s hier den ganzzahligen Wert der gesamten Bedeutung bedeutet, wobei jeder implizierte Dezimalpunkt ignoriert wird und p die Präzision der Anzahl von Ziffern in der Bedeutung ist. Historisch wurden verschiedene Basen für die Darstellung von Gleitkommazahlen verwendet, wobei die Basis 2 (binär) die häufigste ist, gefolgt von der Basis 10 (Dezimalzahl) und anderen weniger üblichen Sorten wie der Basis 16 (hexadezimale Schreibweise). Die Art und Weise, in der die Signifikanz-, Exponenten - und Vorzeichenbits intern auf einem Rechner gespeichert sind, ist implementierungsabhängig. Die üblichen IEEE-Formate werden später detailliert beschrieben, jedoch als Beispiel in der binären Einzelpräzisions-32-Bit-Gleitpunktdarstellung p 24, und so ist die Signatur eine Folge von 24 Bits (1s und 0s). Zum Beispiel sind die ersten 33 Bits der Zahl s 11001001 00001111 11011010 10100010 0. Die Rundung auf 24 Bits im Binärmodus bedeutet, das 24. Bit dem Wert 25 zuzuordnen, der 11001001 00001111 11011011 ergibt. Wenn dieser unter Verwendung der IEEE 754-Codierung gespeichert wird Wird dies mit e 1601601 (wobei s vorausgesetzt wird, dass es einen binären Punkt rechts vom ersten Bit hat) nach einer Linkseinstellung (oder Normalisierung), bei der führende oder auffüllende Nullen abgeschnitten werden, die Bedeutung und s mit e 1601601. Beachten Sie, dass sie sowieso keine Rolle spielen. Da das erste Bit eines Nicht-Null-Binärsignals immer 1 ist, braucht es nicht gespeichert zu werden, was ein zusätzliches Maß an Genauigkeit ergibt. Um die Formel zu berechnen, ist n das normalisierte n-te Bit von links. Die Normalisierung, die umgekehrt wird, wenn 1 addiert wird, kann als eine Form der Kompression betrachtet werden, die eine binäre Bedeutung erlaubt und in ein Feld komprimiert wird, das ein Bit kürzer als die maximale Genauigkeit ist, auf Kosten der Extraverarbeitung. Das Wort Mantisse wird oft als Synonym für Bedeutung und verwendet. Viele Menschen halten diese Verwendung nicht für richtig, da die Mantisse traditionell als der Bruchteil eines Logarithmus definiert wird, während das Merkmal der ganzzahlige Teil ist. Diese Terminologie kommt von der Art, wie Logarithmus-Tabellen verwendet wurden, bevor Computer alltäglich wurden. Log-Tabellen waren eigentlich Tische von Mantissen. Daher ist eine Mantisse der Logarithmus der Bedeutung. Einige andere Computerdarstellungen für nicht integrale Zahlen Die Gleitpunktdarstellung, insbesondere das Standard-IEEE-Format, ist bei weitem die häufigste Art, eine Annäherung an reelle Zahlen in Computern darzustellen, da sie in den meisten großen Computerprozessoren effizient gehandhabt wird. Es gibt jedoch Alternativen: Die Festpunktdarstellung verwendet ganzzahlige Hardwareoperationen, die durch eine Softwareimplementierung einer bestimmten Konvention über die Position des Binär - oder Dezimalpunkts gesteuert werden, beispielsweise 6 Bits oder Ziffern von rechts. Die Hardware, um diese Darstellungen zu manipulieren, ist weniger kostspielig als Gleitkomma und wird auch häufig verwendet, um Integer-Operationen durchzuführen. Binärer Fixpunkt wird üblicherweise in Spezialanwendungen auf eingebetteten Prozessoren verwendet, die nur eine Ganzzahlarithmetik ausführen können, jedoch ist der Dezimalfixpunkt bei kommerziellen Anwendungen üblich. Binärcodierte Dezimalzahl ist eine Codierung für Dezimalzahlen, bei der jede Ziffer durch ihre eigene Binärfolge dargestellt wird. Wo größere Genauigkeit erwünscht ist, kann Gleitkomma-Arithmetik in Software mit variablen Größen-Signalen emuliert werden, die wachsen und schrumpfen, während das Programm läuft. Dies wird als willkürliche Genauigkeit oder skaliertes bignum, Arithmetik bezeichnet. Einige Zahlen (z. B. 1/3 und 0,1) können nicht genau in binärem Gleitkomma dargestellt werden, egal was die Präzision ist. Softwarepakete, die rationale Arithmetik ausführen, stellen Zahlen als Bruchteile mit integriertem Zähler und Nenner dar und können daher jede rationale Zahl genau repräsentieren. Solche Pakete müssen in der Regel bignum Arithmetik für die einzelnen Ganzzahlen verwenden. Computer-Algebra-Systeme wie Mathematica und Maxima können oft irrationale Zahlen wie oder in einer völlig formalen Weise behandeln, ohne sich mit einer spezifischen Kodierung der Bedeutung zu befassen. Solche Programme können Ausdrücke wie genau zu bewerten, weil sie die zugrunde liegende Mathematik kennen. Eine auf natürlichen Logarithmen basierende Darstellung wird manchmal in FPGA-basierten Anwendungen verwendet, bei denen die meisten arithmetischen Operationen Multiplikation oder Division sind. 1 Wie Gleitkomma-Darstellung hat diese Lösung Präzision für kleinere Zahlen sowie eine breite Palette. Bereich der Gleitkommazahlen Wenn der Radixpunkt einstellbar ist, erlaubt die Gleitkomma-Notation die Berechnung über einen weiten Bereich von Größen, wobei eine feste Anzahl von Ziffern verwendet wird, während eine gute Präzision gewährleistet ist. Zum Beispiel würde in einem dezimalen Gleitkomma-System mit drei Ziffern die Multiplikation, die Menschen als 0,12 0,12 0,0144 schreiben würden, ausgedrückt werden: In einem Festkommasystem mit dem Dezimalpunkt links würde es 0,120 0,120 0,014 A sein Des Ergebnisses aufgrund der Unfähigkeit der Ziffern und des Dezimalpunktes verloren, relativ zueinander innerhalb der Ziffernfolge zu schwimmen. Der Bereich der Gleitkommazahlen ist abhängig von der Anzahl der zur Darstellung des Signals verwendeten Ziffern (die signifikanten Ziffern der Zahl) und für den Exponenten. Auf einem typischen Computersystem hat eine binäre Gleitkommazahl mit doppelter Genauigkeit (64 Bit) einen Koeffizienten von 53 Bits (eine davon ist impliziert), einen Exponenten von 11 Bits und ein Vorzeichenbit. Positive Gleitkommazahlen in diesem Format haben einen ungefähren Bereich von 10 308 bis 10 308 (weil 308 ungefähr 1023 log 10 (2) ist, da der Bereich des Exponenten 1022, 1023 beträgt). Die gesamte Bandbreite des Formats beträgt etwa 10 308 bis 10 308 (siehe IEEE 754). Die Anzahl der normalisierten Gleitkommazahlen in einem System F (B, P, L, U) (wobei B die Basis des Systems ist, P die Präzision des Systems zu den P-Zahlen ist, ist L der kleinste im System darstellbare Exponent Und U der größte im System verwendete Exponent) ist: 2 (B - 1) B (P - 1) (U - L 1). Es gibt eine kleinste positive normalisierte Gleitkommazahl, einen Unterlaufpegel UFL BL, der eine 1 als die führende Ziffer und 0 für die verbleibenden Ziffern der Mantisse und den kleinstmöglichen Wert für den Exponenten aufweist. Es gibt eine größte Gleitkommazahl, den Überlaufpegel OFL B (U 1) (1 - B (-P)), der B-1 als Wert für jede Ziffer der Mantisse und den größtmöglichen Wert für den Exponenten hat. Darüber hinaus gibt es repräsentative Werte streng zwischen UFL und UFL. Nämlich Null und negative Null, sowie subnorme Zahlen. 1938 vollendete Konrad Zuse von Berlin den Z1, den ersten mechanischen binären programmierbaren Computer. Es basiert auf booleschen Algebra und hatte die meisten grundlegenden Zutaten der modernen Maschinen, mit dem binären System und heute Standard-Trennung von Speicher und Kontrolle. Die Zuses 1936-Patentanmeldung (Z23139 / GMD Nr. 005/021) deutet auch auf eine von Neumann-Architektur (1945 neu erfunden) mit programm - und datenänderbaren Speicher an. Ursprünglich wurde die Maschine als V1 bezeichnet, wurde aber nach dem Krieg rückwirkend umbenannt, um Verwechslungen mit der V1-Rakete zu vermeiden. Es funktionierte mit Gleitkommazahlen mit einem 7-Bit-Exponenten, 16-Bit-Signandand und einem Vorzeichenbit. Der Speicher benutzte gleitende Metallteile, um 16 solcher Zahlen zu speichern, und arbeitete gut, aber die arithmetische Maßeinheit war weniger erfolgreich, gelegentlich unter bestimmten Maschinenbauproblemen leiden. Das Programm wurde aus gestanztem, abgelegten 35-mm-Film gelesen. Datenwerte können über eine numerische Tastatur eingegeben werden, und die Ausgänge werden auf elektrischen Lampen angezeigt. Die Maschine war kein Allzweckrechner, weil es keine Schleifenfähigkeiten gab. Der Z3 wurde 1941 fertig gestellt und programmgesteuert. Sobald elektronische Digitalrechner Wirklichkeit wurden, wurde die Notwendigkeit, Daten auf diese Weise schnell zu erkennen. Der erste kommerzielle Computer in der Lage, dies in Hardware zu tun scheint zu sein, die Z4 im Jahr 1950, gefolgt von der IBM 704 im Jahr 1954. Für einige Zeit danach war Fließkomma-Hardware eine optionale Funktion und Computer, die es gesagt wurden Wissenschaftliche Computer zu sein oder wissenschaftliche Rechenfähigkeit zu haben. Alle modernen Allzweckcomputer haben diese Fähigkeit. Das PDP-11/44 war eine Erweiterung der 11/34, die den Cache-Speicher und Gleitkomma-Einheiten als Standard-Feature. Die 1962 eingeführte UNIVAC 1100/2200-Reihe unterstützte zwei Gleitkomma-Formate. Die Einzelpräzision verwendete 36 Bits, organisiert in ein 1-Bit-Zeichen, 8-Bit-Exponent und ein 27-Bit-Signal. Die doppelte Präzision verwendete 72 Bits, die als 1-Bit-Zeichen, 11-Bit-Exponent und ein 60-Bit-Signal definiert wurden. Die IBM 7094, eingeführt im gleichen Jahr, unterstützt auch Einzel-und Doppel-Präzision, mit leicht unterschiedlichen Formaten. Vor dem IEEE-754-Standard verwendeten Computer viele verschiedene Formen von Gleitkomma. Diese unterschieden sich in den Wortgrößen, dem Format der Darstellungen und dem Rundungsverhalten von Operationen. Diese unterschiedlichen Systeme implementierten verschiedene Teile der Arithmetik in Hard - und Software mit unterschiedlicher Genauigkeit. Der IEEE-754-Standard wurde in den frühen 1980er-Jahren geschaffen, nachdem Wortgrßen von 32 Bits (oder 16 oder 64) im allgemeinen abgewickelt worden waren. Zu den Neuerungen gehören: Eine präzise spezifizierte Kodierung der Bits, so dass alle kompatiblen Computer Bitmuster gleichermaßen interpretieren würden. Dies machte es möglich, Gleitkommazahlen von einem Computer auf einen anderen zu übertragen. Ein genau spezifiziertes Verhalten der arithmetischen Operationen. Dies bedeutete, dass ein gegebenes Programm, mit gegebenen Daten, immer das gleiche Ergebnis auf jedem konformen Computer liefern würde. Dies hat dazu beigetragen, die fast mystische Reputation, die Gleitkomma-Berechnung für scheinbar nicht-deterministische Verhalten hatte reduzieren. Die Fähigkeit von außergewöhnlichen Bedingungen (Überlauf, Division durch Null, etc.), um durch eine Berechnung in einer gutartigen Weise zu verbreiten und von der Software kontrolliert behandelt werden. IEEE 754: Gleitpunkt in modernen Rechnern Der IEEE hat die Rechnerdarstellung für binäre Gleitkommazahlen in IEEE 754 standardisiert. Dieser Norm folgen nahezu alle modernen Maschinen. Bemerkenswerte Ausnahmen sind IBM-Mainframes, die das IBM-eigene Format unterstützen (zusätzlich zu den IEEE 754-Binär - und Dezimalformaten) und Cray-Vektor-Maschinen, bei denen die T90-Serie eine IEEE-Version hatte, jedoch das Cray-Fließkommaformat verwendet. Der Standard bietet viele eng verwandte Formate, die sich nur in wenigen Details unterscheiden. Fünf dieser Formate werden als Basisformate bezeichnet. Und zwei von ihnen sind besonders weit verbreitet in Computer-Hardware und Sprachen: Präzision, genannt float in der Sprache C Sprache, und real oder real4 in Fortran. Dies ist ein Binärformat, das 32 Bits (4 Byte) belegt und seine Bedeutung hat und eine Genauigkeit von 24 Bits (etwa 7 Dezimalstellen) aufweist. Doppelte Genauigkeit. Genannt Doppel in der C-Sprache Familie und doppelte Genauigkeit oder real8 in Fortran. Dies ist ein Binärformat, das 64 Bits (8 Byte) belegt und seine Bedeutung hat und eine Genauigkeit von 53 Bits (etwa 16 Dezimalstellen) aufweist. Die anderen grundlegenden Formate sind Vierfach-Präzision (128-Bit) binär, sowie dezimale Gleitkomma (64-Bit) und doppelter (128-Bit) Dezimal-Gleitkomma. Weniger gängige Formate sind: Erweitertes Präzisionsformat, 80-Bit-Gleitkommawert. Manchmal wird langes Doppeltes für dieses in der C Sprachfamilie verwendet, obwohl langes Doppeltes ein Synonym für Doppeltes sein kann oder für Vierfachpräzision stehen kann. Half, auch Float16 genannt, ein 16-Bit-Gleitkommawert. Jede Ganzzahl mit einem Absolutwert von kleiner oder gleich 2 24 kann im Einzelpräzisionsformat exakt dargestellt werden, wobei jede beliebige Ganzzahl mit einem Absolutwert kleiner oder gleich 2 53 genau im doppelten Präzisionsformat dargestellt werden kann. Weiterhin kann ein breites Spektrum von Potenzen von 2-fach einer solchen Zahl dargestellt werden. Diese Eigenschaften werden manchmal für rein ganzzahlige Daten verwendet, um 53-Bit-Ganzzahlen auf Plattformen zu erhalten, die doppelte Präzisionsschwimmer haben, aber nur 32-Bit-Integer. Der Standard spezifiziert einige spezielle Werte und ihre Darstellung: positive Unendlichkeit (), negative Unendlichkeit (), eine negative Null (0), die von gewöhnlicher (positiver) Null und nicht von Zahlenwerten (NaNs) verschieden ist. Der Vergleich von Gleitkommazahlen, wie sie durch den IEEE-Standard definiert ist, unterscheidet sich von dem gewöhnlichen Integer-Vergleich. Negative und positive Null vergleichen gleich, und jede NaN verglichen ungleich zu jedem Wert, einschließlich sich. Abgesehen von diesen speziellen Fällen werden signifikante Bits vor weniger signifikanten Bits gespeichert. Alle Werte außer NaN sind streng kleiner als und streng größer als 8722. In einer groben Näherung ist die Bitdarstellung einer IEEE binären Gleitkommazahl proportional zu ihrem Logarithmus der Basis 2 mit einem durchschnittlichen Fehler von etwa 3. (Dies liegt daran, Das Exponentenfeld ist in dem signifikanteren Teil des Datums.) Dies kann in einigen Anwendungen ausgenutzt werden, wie z. B. Volumenrauschen in der digitalen Tonverarbeitung. Obwohl die 32-Bit - (Einzel-) und 64-Bit - (Doppel-) Formate bei weitem am häufigsten sind, erlaubt der Standard tatsächlich viele verschiedene Genauigkeitsstufen. Computerhardware (z. B. die Intel Pentium-Serie und die Motorola 68000-Serie) bietet oft ein 80-Bit-erweitertes Präzisionsformat mit einem 15-Bit-Exponenten, einem 64-Bit-Wert und keinem verborgenen Bit. Es gibt Kontroversen über den Ausfall der meisten Programmiersprachen, um diese erweiterten Präzisionsformate für Programmierer zugänglich zu machen (obwohl C und verwandte Programmiersprachen diese Formate üblicherweise über den langen Doppeltyp auf einer solchen Hardware bereitstellen). Systemverkäufer können auch zusätzliche erweiterte Formate (z. B. 128 Bits) in der Software emulieren. Im Jahr 2000 wurde ein Projekt zur Revision der IEEE 754-Norm gestartet (siehe IEEE 754-Revision), das im Juni 2008 fertiggestellt und genehmigt wurde. Es enthält dezimale Gleitkommaformate und ein 16-Bit-Gleitkommaformat (binary16). Binär16 hat dieselbe Struktur und Regeln wie die älteren Formate mit 1 Vorzeichenbit, 5 Exponentenbits und 10 Nachlaufsignalen und Bits. Es wird in der NVIDIA Cg-Grafiksprache und im openEXR-Standard verwendet. 2 Interne Darstellung Fließkommazahlen werden typischerweise von links nach rechts als Zeichenbit, Exponentfeld und Signifikanz (Mantisse) in ein Rechnerdatum eingepackt. Für die IEEE-754-Binärformate werden sie wie folgt aufgeteilt: Während der Exponent positiv oder negativ sein kann, wird er in binären Formaten als nicht signierte Zahl gespeichert, die eine feste Vorspannung hat. Werte aller 0 in diesem Feld sind für die Nullen und subnormalen Zahlen reserviert, Werte aller 1s sind für die Unendlichkeiten und NaNs reserviert. Der Exponentenbereich für normalisierte Zahlen ist 126, 127 für Einzelpräzision, 1022, 1023 für Doppelte oder 16382, 16383 für Vierfache. Normalisierte Zahlen schließen subnorme Werte, Nullen, Unendlichkeiten und NaNs aus. In den IEEE-Binär-Austauschformaten wird das führende 1 Bit eines normierten Signals nicht tatsächlich im Computer-Datum gespeichert. Es wird das verborgene oder implizite Bit genannt. Aus diesem Grund hat das Einzelpräzisionsformat tatsächlich eine Bedeutung und mit 24 Bits Präzision, das doppelte Präzisionsformat hat 53 und das Vierfache hat 113. Zum Beispiel wurde oben gezeigt, dass auf 24 Bits der Präzision gerundet hat: Zeichen 0160 e 1160 S 110010010000111111011011 (einschließlich des verborgenen Bits) Die Summe der Exponentenvorspannung (127) und des Exponenten (1) beträgt 128, so dass dies im Einzelpräzisionsformat als 0 10000000 10010010000111111011011 (ohne das verborgene Bit) 40490FDB 1 als Hexadezimalzahl dargestellt ist . Sonderwerte Signiert Null Im IEEE 754-Standard ist Null signiert, dh es gibt sowohl eine positive Null (0) als auch eine negative Null (-0). In den meisten Laufzeitumgebungen wird die positive Null normalerweise als 0 ausgegeben, während die negative Null als -0 gedruckt werden kann. Die beiden Werte verhalten sich bei numerischen Vergleichen gleich, aber einige Operationen geben für 0 und 0 unterschiedliche Ergebnisse zurück. Beispielsweise gibt 1 / (0) negative Infinity (exakt) zurück, während 1/0 für diese beiden Operationen eine positive Unendlichkeit zurückgibt Jedoch mit einer Division durch Null-Ausnahme begleitet. Eine Vorzeichen-symmetrische Arkot-Operation ergibt unterschiedliche Ergebnisse für 0 und 0 ohne Ausnahme. Der Unterschied zwischen 0 und 0 ist vor allem bei komplexen Operationen an so genannten Abzweigschnitten spürbar. Subnorme Zahlen Subnorme Werte füllen die Unterströmungslücke mit Werten, bei denen der absolute Abstand zwischen ihnen der gleiche ist wie für benachbarte Werte knapp außerhalb der Unterströmungslücke. Dies ist eine Verbesserung gegenüber der älteren Praxis, um nur Null in der Unterströmungslücke zu haben, und wo unterlaufende Ergebnisse durch Null ersetzt wurden (bündig auf Null). Moderne Floating-Point-Hardware handhaben subnorme Werte (sowie normale Werte) und benötigen keine Software-Emulation für Subnormale. Unendlichkeiten Die Unendlichkeiten der erweiterten reellen Zahllinie können in IEEE-Floating-Point-Datentypen dargestellt werden, ebenso wie normale Floating-Point-Werte wie 1, 1,5 etc. Sie sind keine Fehlerwerte in irgendeiner Weise, obwohl sie oft (aber nicht immer, wie sie sind Hängt von der Rundung ab), die bei Überschreitung als Ersatzwerte verwendet werden. Bei einer Division durch Null-Exception wird eine positive oder negative Unendlichkeit als exaktes Ergebnis zurückgegeben. Eine Unendlichkeit kann auch als Zahl (wie Cs INFINITY-Makro, oder wenn die Programmiersprache erlaubt, dass die Syntax) eingeführt werden. IEEE 754 verlangt, dass Unendlichkeiten in einer vernünftigen Weise behandelt werden, wie z. B. IEEE 754 einen speziellen Wert namens Not a Number (NaN) spezifiziert, der als Ergebnis von cerain ungültigen Operationen wie 0/0, 0 oder sqrt (- 1). Es gibt tatsächlich zwei Arten von NaNs, signalisieren und ruhig. Die Verwendung eines Signalisierungs-NaN in einer arithmetischen Operation (einschließlich numerischer Vergleiche) führt zu einer ungültigen Ausnahme. Die Verwendung einer ruhigen NaN bewirkt lediglich, dass das Ergebnis NaN ist. Die Darstellung von NaNs, die durch den Standard spezifiziert wird, hat einige nicht spezifizierte Bits, die verwendet werden könnten, um die Art des Fehlers zu codieren, aber es gibt keinen Standard für diese Codierung. Theoretisch könnte die Signalisierung NaNs von einem Laufzeitsystem verwendet werden, um die Gleitkommazahlen mit anderen speziellen Werten zu erweitern, ohne die Berechnungen mit normalen Werten zu verlangsamen. Solche Erweiterungen scheinen jedoch nicht alltäglich zu sein. Repräsentative Zahlen, Umwandlung und Rundung Alle Zahlen, die im Gleitkomma-Format ausgedrückt werden, sind rationale Zahlen mit einer terminierenden Erweiterung in der betreffenden Basis (z. B. eine terminale Dezimalexpansion im Basis-10 oder eine terminale Binärausweitung im Basis - 2). Irrationale Zahlen, wie z. B. oder 2 oder nicht-terminierende rationale Zahlen, müssen angenähert werden. Die Anzahl der Ziffern (oder Bits) der Genauigkeit begrenzt auch die Menge der rationalen Zahlen, die genau dargestellt werden können. Beispielsweise kann die Zahl 123456789 eindeutig nicht exakt dargestellt werden, wenn nur acht Dezimalstellen der Genauigkeit zur Verfügung stehen. Wenn eine Zahl in irgendeinem Format (wie eine Zeichenkette) dargestellt wird, bei der es sich nicht um eine native Gleitpunktdarstellung handelt, die in einer Computerimplementierung unterstützt wird, dann erfordert sie eine Umwandlung, bevor sie in dieser Implementierung verwendet werden kann. Wenn die Zahl genau im Gleitkomma-Format dargestellt werden kann, ist die Umwandlung exakt. Wenn es keine exakte Darstellung gibt, dann erfordert die Umwandlung die Wahl, welche Gleitkommazahl verwendet wird, um den ursprünglichen Wert darzustellen. Die gewählte Darstellung hat einen anderen Wert als das Original, und der so eingestellte Wert wird gerundeter Wert genannt. Ob eine rationale Zahl eine terminierende Expansion hat oder nicht, hängt von der Basis ab. Beispielsweise hat in der Basis-10 die Zahl 1/2 eine abschließende Expansion (0,5), während die Zahl 1/3 nicht (0,333) beträgt. In base-2 nur Rationals mit Nennern, die Leistungen von 2 (wie 1/2 oder 3/16) sind beendet. Jedes rationale mit einem Nenner, der einen Primfaktor außer 2 hat, hat eine unendliche binäre Expansion. Dies bedeutet, dass Zahlen, die scheinbar kurz und exakt aussehen, wenn sie im Dezimalformat geschrieben werden, möglicherweise annähern, wenn sie in binären Gleitkomma umgewandelt werden. Zum Beispiel ist die Dezimalzahl 0.1 nicht im binären Gleitkomma einer beliebigen endlichen Genauigkeit darstellbar. Die exakte Binärdarstellung würde eine 1100-Sequenz haben, die endlos weiterläuft: e s 1100110011001100110011001100110011. wo wie zuvor s die Bedeutung und e der Exponent ist. Bei Abrundung auf 24 Bits wird dies zu e 27 s 110011001100110011001101, die tatsächlich 0,100000001490116119384765625 dezimal ist. Als weiteres Beispiel wird die reelle Zahl, die in binärer Form als unendliche Reihe von Bits dargestellt ist, wenn sie durch Rundung auf eine Genauigkeit von 24 Bits angenähert wird. Im binären Einzelpräzisions-Gleitkomma wird dies als s 160160110010010000111111011011 mit e 16016022 dargestellt. Dies hat einen Dezimalwert, während die genauere Approximation des wahren Wertes von ist. Das Ergebnis der Rundung unterscheidet sich von dem wahren Wert um etwa 0,03 Teile pro Millionen und entspricht der Dezimal-Darstellung in den ersten 7 Ziffern. Der Unterschied ist der Diskretisierungsfehler und wird durch die Maschine epsilon begrenzt. Die arithmetische Differenz zwischen zwei aufeinanderfolgenden darstellbaren Gleitkommazahlen, die denselben Exponenten haben, wird als Einheit im letzten Platz (ULP) bezeichnet. Zum Beispiel sind die Zahlen, die durch 45670123 und 45670124 hexadezimal dargestellt werden, ein ULP. Für Zahlen mit einem Exponenten von 0 ist ein ULP genau 2 23 oder ungefähr 10 7 in Einzelpräzision und ungefähr 10 16 in doppelter Genauigkeit. Das mandatierte Verhalten der IEEE-kompatiblen Hardware ist, dass das Ergebnis innerhalb einer Hälfte einer ULP liegt. Rundungsmodi Rundung wird verwendet, wenn das exakte Ergebnis einer Gleitkomma-Operation (oder eine Umwandlung in Gleitkomma-Format) mehr Ziffern benötigt, als es Ziffern in der Bedeutung gibt. Es gibt verschiedene Rundungsschemata (oder Rundungsmodi). Historisch gesehen war Trunkierung der typische Ansatz. Seit der Einführung von IEEE 754 wird die Default-Methode (runder bis nächstgelegener Bereich, die Bindung zu sogar, manchmal auch Bankers Rounding genannt) häufiger verwendet. Diese Methode rundet das ideale (unendlich präzise) Ergebnis einer arithmetischen Operation auf den nächsten darstellbaren Wert und liefert diese Darstellung als Ergebnis. 3 Im Falle eines Unentschiedens wird der Wert gewählt, der die Bedeutung und das Ende einer gerade Ziffer annehmen würde. Der IEEE-754-Standard erfordert, dass dieselbe Rundung auf alle grundlegenden algebraischen Operationen einschließlich Quadratwurzel und Konvertierungen angewandt wird, wenn es ein numerisches Ergebnis (nicht NaN) gibt. Dies bedeutet, daß die Ergebnisse der IEEE-754-Operationen mit Ausnahme der Darstellung von NaNs vollständig in allen Bits des Ergebnisses bestimmt werden. (Bibliotheksfunktionen wie Cosinus und Log sind nicht mandatiert.) Alternative Rundungsoptionen sind ebenfalls verfügbar. IEEE 754 legt die folgenden Rundungsmoden fest: runde Nächste, wobei die Runden auf die nächstgelegene gerade Ziffer in der gewünschten Position (die Standardeinstellung und bei weitem die gängigste Betriebsart) um die nächste liegen, wobei die Runden von Null abweichen (optional für binary floating) - Punkt und häufig im Dezimaltrennzeichen) runden (gegen negative Ergebnisse also ringsum gegen Null) runden (gegen negative Ergebnisse also runden weg von Null) rund gegen Null (manchmal auch als Chop-Modus ist es ähnlich dem gemeinsamen Verhalten von float-to - integer-Konvertierungen, die 3,9 zu 3 umwandeln) Alternative Modi sind nützlich, wenn die Menge des einzuführenden Fehlers beschränkt werden muss. Anwendungen, die einen beschränkten Fehler erfordern, sind Multi-Präzisions-Gleitkomma und Intervallarithmetik. Eine weitere Verwendung der Rundung ist, wenn eine Zahl explizit auf eine bestimmte Anzahl von Dezimal - (oder Binär-) Stellen gerundet wird, wie bei der Rundung eines Ergebnisses auf Euro und Cent (zwei Dezimalstellen). Gleitpunktarithmetikoperationen Zur Vereinfachung der Darstellung und des Verständnisses wird in den Beispielen Dezimalradix mit 7-stelliger Genauigkeit verwendet, wie im IEEE 754 decimal32-Format. Die Grundprinzipien sind die gleichen in jedem Radix oder Präzision, mit der Ausnahme, dass die Normierung ist optional (es hat keinen Einfluss auf den numerischen Wert des Ergebnisses). Hierbei bezeichnet s die Bedeutung und e den Exponenten. Addition und Subtraktion Eine einfache Methode, um Gleitkommazahlen hinzuzufügen, besteht darin, sie zuerst mit demselben Exponenten darzustellen. Im folgenden Beispiel wird die zweite Zahl um drei Stellen nach rechts verschoben und mit der üblichen Addition Methode fortgesetzt: Dies ist das wahre Ergebnis, die genaue Summe der Operanden. Sie wird auf sieben Ziffern gerundet und dann bei Bedarf normalisiert. Das Endergebnis ist zu beachten, dass die niedrigen 3 Stellen des zweiten Operanden (654) im Wesentlichen verloren gehen. Dies ist ein Rundungsfehler. Im Extremfall kann die Summe zweier ungleicher Zahlen gleich einer von ihnen sein: Ein anderes Problem des Signifikanzverlustes tritt auf, wenn zwei nahe Zahlen subtrahiert werden. Im folgenden Beispiel sind e 1601605 s 1601601.234571 und e 1601605 s 1601601.234567 Darstellungen der Rationalen 123457.1467 und 123456.659. Die beste Darstellung dieser Differenz ist e 1601601 s 1601604.877000, die sich mehr als 20 von e 1601601 s 1601604.000000 unterscheidet. In extremen Fällen kann das Endergebnis Null sein, obwohl eine exakte Berechnung mehrere Millionen betragen kann. Diese Annullierung verdeutlicht die Gefahr, daß alle Ziffern eines berechneten Ergebnisses sinnvoll sind. Der Umgang mit den Konsequenzen dieser Fehler ist ein Thema in der numerischen Analyse, siehe auch Genauigkeitsprobleme. Multiplikation Zur Multiplikation werden die Signifikanzen multipliziert, während die Exponenten addiert werden, und das Ergebnis wird gerundet und normalisiert. Division ist ähnlich, ist aber komplizierter. Es gibt keine Aufhebungs - oder Absorptionsprobleme mit Multiplikation oder Division, obwohl kleine Fehler auftreten können, wenn Operationen wiederholt ausgeführt werden. In practice, the way these operations are carried out in digital logic can be quite complex (see Booths multiplication algorithm and digital division). 4 For a fast, simple method, see the Horner method. Dealing with exceptional cases Floating-point computation in a computer can run into three kinds of problems: An operation can be mathematically illegal, such as division by zero. An operation can be legal in principle, but not supported by the specific format, for example, calculating the square root of 1 or the inverse sine of 2 (both of which result in complex numbers). An operation can be legal in principle, but the result can be impossible to represent in the specified format, because the exponent is too large or too small to encode in the exponent field. Such an event is called an overflow (exponent too large) or underflow (exponent too small). Prior to the IEEE standard, such conditions usually caused the program to terminate, or triggered some kind of trap that the programmer might be able to catch. How this worked was system-dependent, meaning that floating-point programs were not portable. The original IEEE 754 standard (from 1984) took a first step towards a standard way for the IEEE 754 based operations to record that an error occurred. Here ignoring trapping (optional in the 1984 version) and alternate exception handling modes (optional in the 2008 version, replacing trapping), and just looking at the required default method of handling exceptions according to IEEE 754. Arithmetic exceptions are (by default) required to be recorded in sticky error indicator bits. That they are sticky means that they are not reset by the next (arithmetic) operation, but stay set until explicitly reset. The computation is not interrupted (by default), a result is always computed according to specification. For instance, 1/0 returns , while also setting the divide-by-zero error bit. However, the original IEEE 754 standard failed to recommend operations to handle such sets of arithmetic error bits. So while these were faithfully implemented in hardware, no programming language (apart from assembler) gave access to them in any way. Later, a few proprietary libraries did give access to these error bits. Following that, for a few programming languages (C and Fortran) the process of standardising access and handling of these error bits was started. For most other programming languages there is still no standard way of accessing and handling the arithmetic error bits. The 2008 version of the IEEE 754 standard now specifies a few operations for accessing and handling the arithmetic error bits. They are not fully specified (in particular, thread isolation of them and communicating them between threads along with values, is missing), nor does this introduce such arithmetic error bit handling operations in programming languages that dont already specify them. So while there is still a lack of standardisation in the area of accessing arithmetic error bits, one important step made by the introduction of the IEEE 754 standard is that floating point operations do not (by default) halt the program or cause some other hard-to-handle derailment of the execution of the program. The results returned from the operations are often sufficiently good for many programs to ignore the error bits. IEEE 754 specifies five arithmetic errors that are to be recorded in sticky bits (by default note that trapping and other alternatives are optional and, if provided, non-default). inexact . set if the rounded (and returned) value is different from the mathematically exact result of the operation. underflow . set if the rounded value is tiny (as specified in IEEE 754) and inexact (or maybe limited to if it has denormalisation loss, as per the 1984 version of IEEE 754), returning a subnormal value (including the zeroes). overflow . set if the absolute value of the rounded value is too large to be represented (an infinity or maximal finite value is returned, depending on which rounding is used). divide-by-zero . set if the result is infinite given finite operands (returning an infinity, either or ). invalid . set if a real-valued result cannot be returned (like for sqrt(1), or 0/0), returning a quiet NaN. Accuracy problems The fact that floating-point numbers cannot faithfully mimic the real numbers, and that floating-point operations cannot faithfully mimic true arithmetic operations, leads to many surprising situations. This is related to the finite precision with which computers generally represent numbers. For example, the non-representability of 0.1 and 0.01 (in binary) means that the result of attempting to square 0.1 is neither 0.01 nor the representable number closest to it. In 24-bit (single precision) representation, 0.1 (decimal) was given previously as e 1601604 s 160160110011001100110011001101, which is Squaring this number gives Squaring it with single-precision floating-point hardware (with rounding) gives But the representable number closest to 0.01 is Also, the non-representability of (and /2) means that an attempted computation of tan(/2) will not yield a result of infinity, nor will it even overflow. It is simply not possible for standard floating-point hardware to attempt to compute tan(/2), because /2 cannot be represented exactly. This computation in C: will give a result of 16331239353195370.0. In single precision (using the tanf function), the result will be 22877332.0. By the same token, an attempted computation of sin() will not yield zero. The result will be (approximately) 0.1225 in double precision, or 0.8742 in single precision. 5 While floating-point addition and multiplication are both commutative ( a b b a and a b b a ), they are not necessarily associative. That is, ( a b ) c is not necessarily equal to a ( b c ). Using 7-digit decimal arithmetic: They are also not necessarily distributive. That is, ( a b ) c may not be the same as a c b c . In addition to loss of significance, inability to represent numbers such as and 0.1 exactly, and other slight inaccuracies, the following phenomena may occur: Cancellation: subtraction of nearly equal operands may cause extreme loss of accuracy. This is perhaps the most common and serious accuracy problem. Conversions to integer are not intuitive: converting (63.0/9.0) to integer yields 7, but converting (0.63/0.09) may yield 6. This is because conversions generally truncate rather than round. Floor and ceiling functions may produce answers which are off by one from the intuitively expected value. Limited exponent range: results might overflow yielding infinity, or underflow yielding a subnormal number or zero. In these cases precision will be lost. Testing for safe division is problematic: Checking that the divisor is not zero does not guarantee that a division will not overflow and yield infinity. Testing for equality is problematic. Two computational sequences that are mathematically equal may well produce different floating-point values. Programmers often perform comparisons within some tolerance (often a decimal constant, itself not accurately represented), but that doesnt necessarily make the problem go away. Machine precision Machine precision is a quantity that characterizes the accuracy of a floating point system. It is also known as unit roundoff or machine epsilon. Usually denoted , its value depends on the particular rounding being used. With a mantissa of digits and base : With rounding to zero: whereas rounding to nearest: This is important since it bounds the relative error in representing any non-zero real number x within the normalized range of a floating point system: Minimizing the effect of accuracy problems Because of the issues noted above, naive use of floating-point arithmetic can lead to many problems. The creation of thoroughly robust floating-point software is a complicated undertaking, and a good understanding of numerical analysis is essential. In addition to careful design of programs, careful handling by the compiler is required. Certain optimizations that compilers might make (for example, reordering operations) can work against the goals of well-behaved software. There is some controversy about the failings of compilers and language designs in this area. See the external references at the bottom of this article. Floating-point arithmetic is at its best when it is simply being used to measure real-world quantities over a wide range of scales (such as the orbital period of Io or the mass of the proton ), and at its worst when it is expected to model the interactions of quantities expressed as decimal strings that are expected to be exact. An example of the latter case is financial calculations. For this reason, financial software tends not to use a binary floating-point number representation. 6 The decimal data type of the C programming language. and the IEEE 854 standard, are designed to avoid the problems of binary floating-point representation, and make the arithmetic always behave as expected when numbers are printed in decimal. Small errors in floating-point arithmetic can grow when mathematical algorithms perform operations an enormous number of times. A few examples are matrix inversion, eigenvector computation, and differential equation solving. These algorithms must be very carefully designed if they are to work well. Expectations from mathematics may not be realised in the field of floating-point computation. For example, it is known that , and that . These facts cannot be counted on when the quantities involved are the result of floating-point computation. A detailed treatment of the techniques for writing high-quality floating-point software is beyond the scope of this article, and the reader is referred to the references at the bottom of this article. Descriptions of a few simple techniques follow. The use of the equality test ( if (xy). ) is usually not recommended when expectations are based on results from pure mathematics. Such tests are sometimes replaced with fuzzy comparisons ( if (abs(x-y) lt epsilon). ), where epsilon is sufficiently small and tailored to the application, such as 1.0E-13 - see machine epsilon). The wisdom of doing this varies greatly. It is often better to organize the code in such a way that such tests are unnecessary. An awareness of when loss of significance can occur is useful. For example, if one is adding a very large number of numbers, the individual addends are very small compared with the sum. This can lead to loss of significance. Suppose, for example, that one needs to add many numbers, all approximately equal to 3. After 1000 of them have been added, the running sum is about 3000. A typical addition would then be something like The low 3 digits of the addends are effectively lost. The Kahan summation algorithm may be used to reduce the errors. Computations may be rearranged in a way that is mathematically equivalent but less prone to error. As an example, Archimedes approximated by calculating the perimeters of polygons inscribing and circumscribing a circle, starting with hexagons, and successively doubling the number of sides. The recurrence formula for the circumscribed polygon is: Here is a computation using IEEE double (a significand with 53 bits of precision) arithmetic: While the two forms of the recurrence formula are clearly equivalent, the first subtracts 1 from a number extremely close to 1, leading to huge cancellation errors. Note that, as the recurrence is applied repeatedly, the accuracy improves at first, but then it deteriorates. It never gets better than about 8 digits, even though 53-bit arithmetic should be capable of about 16 digits of precision. When the second form of the recurrence is used, the value converges to 15 digits of precision. Computable number Decimal floating point double precision Fixed-point arithmetic FLOPS half precision IEEE 754 Standard for Binary Floating-Point Arithmetic IBM Floating Point Architecture minifloat Q (number format) for constant resolution quad precision Significant digits single precision Further reading What Every Computer Scientist Should Know About Floating-Point Arithmetic . by David Goldberg, published in the March, 1991 issue of Computing Surveys. Donald Knuth. The Art of Computer Programming . Volume 2: Seminumerical Algorithms . Third Edition. Addison-Wesley, 1997. ISBN 0-201-89684-2. Section 4.2: Floating Point Arithmetic, pp.214264. Press et al. Numerical Recipes in C. The Art of Scientific Computing, ISBN 0-521-75033-4 . Notes and references Haohuan Fu, Oskar Mencer, Wayne Luk32(December 2006).32Comparing Floating-point and Logarithmic Number Representations for Reconfigurable Acceleration .32 IEEE Conference on Field Programmable Technology . ieeexplore. ieee. org/search/wrapper. jsparnumber4042464. 160 openEXR Computer hardware doesnt necessarily compute the exact value it simply has to produce the equivalent rounded result as though it had computed the infinitely precise result. The enormous complexity of modern division algorithms once led to a famous error. An early version of the Intel Pentium chip was shipped with a division instruction that, on rare occasions, gave slightly incorrect results. Many computers had been shipped before the error was discovered. Until the defective computers were replaced, patched versions of compilers were developed that could avoid the failing cases. See Pentium FDIV bug . But an attempted computation of cos() yields 1 exactly. Since the derivative is nearly zero near , the effect of the inaccuracy in the argument is far smaller than the spacing of the floating-point numbers around 1, and the rounded result is exact. General Decimal Arithmetic External links Kahan, William and Darcy, Joseph (2001). How Javas floating-point hurts everyone everywhere. Retrieved September 5, 2003 from cs. berkeley. edu/ wkahan/JAVAhurt. pdf . Survey of Floating-Point Formats This page gives a very brief summary of floating-point formats that have been used over the years. The pitfalls of verifying floating-point computations . by David Monniaux, also printed in ACM Transactions on programming languages and systems (TOPLAS) . May 2008: a compendium of non-intuitive behaviours of floating-point on popular architectures, with implications for program verification and testing 2 The opencores. org website contains open source floating point IP cores for the implementation of floating point operators in FPGA or ASIC devices. The project, doublefpu, contains verilog source code of a double precision floating point unit. The project, fpuvhdl, contains vhdl source code of a single precision floating point unit. Binary Calculator (Want to calculate with decimal operands You must convert them first.) About the Binary Calculator This is an arbitrary-precision binary calculator. Es kann hinzufügen. subtrahieren. multiplizieren. Oder zwei Binärzahlen. It can operate on very large integers and very small fractional values 8212 and combinations of both. Dieser Rechner ist, vom Entwurf, sehr einfach. Sie können es verwenden, um binäre Zahlen in ihrer grundlegendsten Form zu erforschen. Es arbeitet auf ldquoputerdquo binäre Zahlen, nicht Computer-Zahlen-Formate wie two8217s Komplement oder IEEE binären Gleitkomma. How To Use The Binary Calculator Enter one operand in each box. Each operand must be a positive or negative number with no commas or spaces, not expressed as a fraction, and not in scientific notation. Bruchwerte werden mit einem Radixpunkt (lsquo. rsquo, nicht lsquo, rsquo) und negative Zahlen mit einem Minuszeichen (ldquo-rdquo) vorangestellt angezeigt. Select an operation (, 8211 , /). Change the number of bits you want displayed in the binary result, if different than the default (this applies only to division, and then only when the answer has an infinite fractional part). Klicken Sie auf lsquoCalculatersquo, um den Vorgang auszuführen. Klicken Sie auf lsquoClearrsquo, um das Formular zurückzusetzen und neu zu starten. If you want to change an operand, just type over the original number and click lsquoCalculatersquo 8212 there is no need to click lsquoClearrsquo first. Ebenso können Sie den Operator ändern und die Operanden so halten, wie sie sind. Neben dem Ergebnis der Operation wird die Anzahl der Ziffern in den Operanden und das Ergebnis angezeigt. For example, when calculating 1.1101 111.100011 1101.1010110111, the ldquoNum Digitsrdquo box displays ldquo1.4 3.6 4.10rdquo. Dies bedeutet, dass Operand 1 eine Ziffer in ihren ganzzahligen Teil und vier Stellen in seiner Bruchteil hat, Operand 2 hat drei Ziffern in ihren ganzzahligen Teil und sechs Ziffern in ihrer Bruchteil, und das Ergebnis hat vier Ziffern in ihren ganzzahligen Teil und zehn Ziffern In seinem Bruchteil. Addition, subtraction, and multiplication always produce a finite result, but division may (in fact, in most cases) produce an infinite (repeating) fractional value. Infinite results are truncated 8212 not rounded 8212 to the specified number of bits. Unendliche Ergebnisse werden mit einer Ellipse (8230) angefügt, um das Ergebnis, und mit einem lsquo8734rsquo Symbol als die Anzahl der Bruchzahlen. Für Divisionen, die dyadische Fraktionen repräsentieren. the result will be finite. Und wird in voller Genauigkeit 8212 ungeachtet der Einstellung für die Anzahl der Bruchbits angezeigt. For example, 1/1010 to 24 fractional bits is 0.0001100110011001100110018230, with ldquoNum Digitsrdquo ldquo1.0 / 4.0 0.8734rdquo 11/100 0.11, with ldquoNum Digitsrdquo ldquo2.0 / 3.0 0.2rdquo. Verwenden des Taschenrechners zum Erkunden der Gleitpunktarithmetik Obwohl dieser Rechner reine binäre Arithmetik implementiert, können Sie ihn verwenden, um Gleitpunktarithmetik zu erkunden. Zum Beispiel, sagen Sie, warum, mit IEEE doppelter Genauigkeit binäre Gleitkomma-Arithmetik, 129.95 10 1299,5, aber 129.95 100 12994.999999999998181010596454143524169921875 wissen wollte. There are two sources of imprecision in such a calculation: decimal to floating-point conversion. and limited-precision binary arithmetic. Eine Dezimal-zu-Gleitkomma-Konvertierung führt zu einer Ungenauigkeit ein, weil ein Dezimaloperand nicht über eine exakte Gleitkommazahl verfügt, die eine begrenzte Genauigkeit aufweist. Binäre Arithmetik führt zu einer Ungenauigkeit, da eine binäre Berechnung mehr Bits erzeugen kann, als sie gespeichert werden können. In diesen Fällen erfolgt eine Rundung. 10 und 100 (beide Dezimalzahlen) haben exakte Gleitkomma-Äquivalente (1010 und 1100100), aber 129,95 hat nur eine ungefähre Darstellung. Mein Dezimal-Dual-Konverter wird Ihnen sagen, dass in reinen binär, 129.95 hat eine unendliche Wiederholungs Fraktion: 10000001.111100110011001100110011001100110011001100110 011 8230, gerundet auf die 53 Bits mit doppelter Genauigkeit, it8217s die 129,94999999999998863131622783839702606201171875 in dezimal ist. 129.95 10 129.95 10 wird wie folgt berechnet denen gleich 10100010011.011111111111111111111111111111111111111111 1 Dies ist 54 Bits lang, so dass, wenn it8217s auf 53 Bits gerundet wird es 129,95 100 129,95 100 berechnet wird als die 11001011000010.111111111111111111111111111111111111111 011 gleich lang Dies ist 56 Bits, so dass, wenn it8217s abgerundet 53 Bits wird es, was 12994,999999999998181010596454143524169921875 Diskussion Um dieses Beispiel zu bearbeiten, mussten Sie wie ein Computer handeln, so langweilig wie das war. Zuerst mussten Sie die Operanden in Binärdateien konvertieren, sie abrunden, wenn nötig, mussten Sie sie multiplizieren, und um das Ergebnis. Aus praktischen Gründen ist die Grße der Eingaben 8212 und die Anzahl der Bruchbits in einem unendlichen Teilungsergebnis 8212 begrenzt. Wenn Sie diese Grenzwerte überschreiten, erhalten Sie eine Fehlermeldung. But within these limits, all results will be accurate (in the case of division, results are accurate through the truncated bit position).

No comments:

Post a Comment