Das Schwimmen des Punkts

In der Computerwissenschaft, Punkt schwimmen lassend, beschreibt eine Methode, reelle Zahlen in einem Weg zu vertreten, der einen breiten Wertbereich unterstützen kann. Zahlen werden im Allgemeinen ungefähr zu einer festgelegten Zahl von positiven Ziffern vertreten und haben das Verwenden einer Hochzahl erklettert. Die Basis für das Schuppen ist normalerweise 2, 10 oder 16. Die typische Zahl, die genau vertreten werden kann, ist der Form:

:Significant-Ziffern × stützen

Der Begriff-Schwimmen-Punkt bezieht sich auf die Tatsache, dass der Basis-Punkt (dezimaler Punkt, oder, allgemeiner in Computern, binärem Punkt) "schwimmen" kann; d. h. es kann überall hinsichtlich der positiven Ziffern der Zahl gelegt werden. Diese Position wird getrennt in der inneren Darstellung angezeigt, und von Schwimmpunkt-Darstellung kann so als eine Computerverwirklichung der wissenschaftlichen Notation gedacht werden. Im Laufe der Jahre, eine Vielfalt von Schwimmpunkt-Darstellungen sind in Computern verwendet worden. Jedoch, seit den 1990er Jahren, ist die meistens gestoßene Darstellung dass definiert durch den IEEE 754 Standard.

Der Vorteil der Schwimmpunkt-Darstellung über den festen Punkt und Darstellung der ganzen Zahl besteht darin, dass es einen viel breiteren Wertbereich unterstützen kann. Zum Beispiel kann eine Festkommadarstellung, die sieben dezimale Ziffern mit zwei dezimalen Plätzen hat, die Nummern 12345.67, 123.45, 1.23 und so weiter vertreten, wohingegen eine Schwimmpunkt-Darstellung (wie der IEEE 754 Decimal32-Format) mit sieben dezimalen Ziffern außerdem 1.234567, 123456.7, 0.00001234567, 1234567000000000, und so weiter vertreten konnte. Die Schwimmpunkt-Format-Bedürfnisse ein bisschen mehr Lagerung (um die Position des Basis-Punkts zu verschlüsseln), so wenn versorgt, in demselben Raum, erreichen Schwimmpunkt-Zahlen ihre größere Reihe auf Kosten der Präzision.

Die Geschwindigkeit von Schwimmpunkt-Operationen, die allgemein auf in Leistungsmessungen als MISSERFOLGE verwiesen sind, ist eine wichtige Maschineneigenschaft besonders in der Software, die groß angelegte mathematische Berechnungen durchführt.

Übersicht

Eine Zahl-Darstellung (hat ein Ziffer-System in der Mathematik genannt), gibt eine Weise an, eine Zahl zu versorgen, die als eine Reihe von Ziffern verschlüsselt werden kann. Die Arithmetik wird als eine Reihe von Handlungen auf der Darstellung definiert, die klassische arithmetische Operationen vortäuschen.

Es gibt mehrere Mechanismen, durch die Reihen von Ziffern Zahlen vertreten können. In der allgemeinen mathematischen Notation kann die Ziffer-Schnur jeder Länge sein, und die Position des Basis-Punkts wird durch das Stellen eines ausführlichen "Punkt"-Charakters (Punkt oder Komma) dorthin angezeigt. Wenn der Basis-Punkt dann weggelassen wird, wie man implizit annimmt, liegt er am richtigen (am wenigsten bedeutenden) Ende der Schnur (d. h. die Zahl ist eine ganze Zahl). In Systemen des festen Punkts wird eine spezifische Annahme darüber gemacht, wo der Basis-Punkt in der Schnur gelegen wird. Zum Beispiel konnte die Tagung darin bestehen, dass die Schnur aus 8 dezimalen Ziffern mit dem dezimalen Punkt in der Mitte besteht, so dass "00012345" einen Wert von 1.2345 hat.

In der wissenschaftlichen Notation wird die gegebene Zahl durch eine Macht 10 erklettert, so dass es innerhalb einer bestimmten Reihe normalerweise zwischen 1 und 10, mit dem Basis-Punkt liegt, der sofort nach der ersten Ziffer erscheint. Der Skalenfaktor, als eine Macht zehn, wird dann getrennt am Ende der Zahl angezeigt. Zum Beispiel ist die Revolutionsperiode von Mondio von Jupiter 152853.5047 Sekunden, ein Wert, der in der Standardform wissenschaftliche Notation als 1.528535047 Sekunden vertreten würde.

Schwimmpunkt-Darstellung ist im Konzept der wissenschaftlichen Notation ähnlich. Logisch besteht eine Schwimmpunkt-Zahl aus:

  • Eine unterzeichnete Ziffer-Schnur einer gegebenen Länge in einer gegebenen Basis (oder Basis). Diese Ziffer-Schnur wird den significand, Koeffizienten oder, weniger häufig, der mantissa (sieh unten) genannt. Die Länge des significand bestimmt die Präzision, zu der Zahlen vertreten werden können. Wie man annimmt, ist die Basis-Punkt-Position immer irgendwo innerhalb significand-häufig gerade danach oder kurz zuvor der grösste Teil der positiven Ziffer, oder rechts von der niedrigstwertigen (am wenigsten bedeutenden) Ziffer. Dieser Artikel wird allgemein der Tagung folgen, dass der Basis-Punkt gerade nach der bedeutendsten (leftmost) Ziffer ist.
  • Eine unterzeichnete Hochzahl der ganzen Zahl, auch gekennzeichnet als die Eigenschaft oder Skala, die den Umfang der Zahl modifiziert.

Um den Wert der Schwimmpunkt-Zahl abzuleiten, muss man den significand mit der Basis multiplizieren, die zur Macht der Hochzahl erhoben ist, die zur Verschiebung des Basis-Punkts von seiner implizierten Position durch mehrere dem Wert der Hochzahl nach rechts gleiche Plätze gleichwertig ist, wenn die Hochzahl positiv ist, oder nach links wenn die Hochzahl negativ ist.

Mit der Basis 10 (die vertraute dezimale Notation) als ein Beispiel wird die Nummer 152853.5047, die zehn dezimale Ziffern der Präzision hat, als der significand 1528535047 zusammen mit einer Hochzahl 5 vertreten (wenn die implizierte Position des Basis-Punkts nach dem ersten der grösste Teil der positiven Ziffer, hier 1 ist). Um den Ist-Wert zu bestimmen, wird ein dezimaler Punkt gelegt, nachdem die erste Ziffer des significand und des Ergebnisses mit 10 multipliziert wird, um 1.528535047 × 10, oder 152853.5047 zu geben. In der Speicherung solch einer Zahl braucht die Basis (10) nicht versorgt zu werden, da es dasselbe für die komplette Reihe von unterstützten Zahlen sein wird, und so abgeleitet werden kann.

Symbolisch ist dieser Endwert

:

wo s der Wert des significand (nachdem ist, den implizierten Basis-Punkt in Betracht ziehend), ist b die Basis, und e ist die Hochzahl.

Gleichwertig:

:

wo s hier den Wert der ganzen Zahl des kompletten significand bedeutet, jeden implizierten dezimalen Punkt ignorierend, und p die Präzision - die Zahl von Ziffern im significand ist.

Historisch sind mehrere Zahl-Basen verwendet worden, um Schwimmpunkt-Zahlen, mit der Basis 2 (Dualzahl) zu vertreten, die das allgemeinste, gefolgte durch die Basis 10 (Dezimalzahl) und andere weniger allgemeine Varianten, wie Basis 16 (hexadecimal Notation), sowie einige exotische wie 3 ist (sieh Setun). Schwimmpunkt-Zahlen sind rationale Zahlen, weil sie als eine von einem anderen geteilte ganze Zahl vertreten werden können. Die Basis bestimmt jedoch die Bruchteile, die vertreten werden können. Zum Beispiel kann 1/5 nicht genau als eine Schwimmpunkt-Zahl mit einer binären Basis vertreten werden, aber kann genau mit einer dezimalen Basis vertreten werden.

Der Weg, auf den der significand, die Hochzahl und die Zeichen-Bit innerlich auf einem Computer versorgt werden, ist von der Durchführung abhängig. Die allgemeinen IEEE-Formate werden im Detail später und anderswohin beschrieben, aber als ein Beispiel in der binären einfachen Präzision (32 Bit) ist Schwimmpunkt-Darstellung p=24 und so der significand eine Schnur von 24 Bit. Zum Beispiel ist die Zahl π's die ersten 33 Bit 11001001 00001111 11011010 10100010 0. Das Runden zu 24 Bit in der binären Weise bedeutet, das 24. Bit der Wert des 25. zuzuschreiben, der 11001001 00001111 11011011 trägt. Wenn das mit dem IEEE 754 Verschlüsselung versorgt wird, wird das der significand s mit e = 1 (wo, wie man annimmt, s einen binären Punkt rechts vom ersten Bit hat) nach einer nach links Anpassung (oder Normalisierung), während dessen die Führung oder das Schleppen von Nullen gestutzt sind, sollte dort irgendwelcher sein. Bemerken Sie, dass sie irgendwie nicht von Bedeutung sind. Dann, da das erste Bit eines binären Nichtnullsignificand immer 1 ist, braucht es nicht versorgt zu werden, ein Extrabit der Präzision gebend. Um π zu berechnen, ist die Formel

:

&\\ist (1 + \sum_ {n=1} ^ {p-1} \text {Bit} _n\times 2^ {-n} \right) \times 2^e \\abgereist

= &\\ist (1 + 1\times 2^ {-1} + 0\times 2^ {-2} + 1\times 2^ {-4} + 1\times2^ {-7} + \dots + 1\times 2^ {-23} \right) \times 2^1 \\abgereist

= &\\; 1.5707964\times 2

\end {richten} </Mathematik> {aus}

wo n das n-te Bit des normalisierten significand vom links ist. Von Normalisierung, die umgekehrt wird, wenn 1 oben hinzugefügt wird, kann als eine Form der Kompression gedacht werden; es erlaubt einem binären significand, in ein Feld um ein Bit kürzer zusammengepresst zu werden, als die maximale Präzision auf Kosten der Extraverarbeitung.

Das Wort "mantissa" wird häufig als ein Synonym für significand verwendet. Der Gebrauch von mantissa im Platz von significand oder Koeffizienten wird entmutigt, weil der mantissa als der Bruchteil eines Logarithmus traditionell definiert wird, während die Eigenschaft der Teil der ganzen Zahl ist. Diese Fachsprache kommt aus der Weise, auf die Logarithmus-Tische verwendet wurden, bevor Computer gewöhnlich geworden sind. Klotz-Tische waren wirklich Tische von mantissas.

Einige andere Computerdarstellungen für nichtintegrierte Zahlen

Schwimmpunkt-Darstellung, insbesondere das IEEE Standardformat, ist bei weitem die allgemeinste Weise, eine Annäherung an reelle Zahlen in Computern zu vertreten, weil es in größten Computerverarbeitern effizient behandelt wird. Jedoch gibt es Alternativen:

  • Festkommadarstellung verwendet Hardware-Operationen der ganzen Zahl, die von einer Softwaredurchführung einer spezifischen Tagung über die Position des binären oder dezimalen Punkts, zum Beispiel, 6 Bit oder der Ziffern vom Recht kontrolliert sind. Die Hardware, um diese Darstellungen zu manipulieren, ist weniger kostspielig als Schwimmpunkt und wird auch allgemein verwendet, um Operationen der ganzen Zahl durchzuführen. Binärer fester Punkt wird gewöhnlich in Anwendungen des speziellen Zwecks auf eingebetteten Verarbeitern verwendet, die nur Arithmetik der ganzen Zahl tun können, aber Dezimalzahl befestigter Punkt ist in kommerziellen Anwendungen üblich.
  • Binär codierte Dezimalzahl (BCD) ist eine Verschlüsselung für Dezimalzahlen, in denen jede Ziffer durch seine eigene binäre Folge vertreten wird. Es ist möglich, ein Schwimmpunkt-System mit der BCD-Verschlüsselung durchzuführen.
  • Logarithmische Zahl-Systeme vertreten eine reelle Zahl durch den Logarithmus seines absoluten Werts, und ein Zeichen hat gebissen. Der Wertvertrieb ist dem Schwimmpunkt ähnlich, aber die Kurve des Werts zur Darstellung, d. h. der Graph der Logarithmus-Funktion, ist (außer an 0) glatt. Gegen die Fließkommaarithmetik, in einer logarithmischen Zahl-Systemmultiplikation, sind Abteilung und exponentiation leicht durchzuführen, aber Hinzufügung und Subtraktion sind schwierig. Die Niveau-Index-Arithmetik von Clenshaw, Olver und Turner ist ein auf einer verallgemeinerten Logarithmus-Darstellung gestütztes Schema.
  • Wo größere Präzision gewünscht wird, kann Fließkommaarithmetik (normalerweise in der Software) mit der variablen Länge significands durchgeführt werden (und manchmal Hochzahlen), die abhängig vom wirklichen Bedürfnis und je nachdem nach Größen geordnet werden, wie die Berechnung weitergeht. Das wird willkürliche Präzision genannt, die Punkt-Arithmetik schwimmen lässt.
  • Einige Zahlen (z.B, 1/3 und 0.1) können genau im binären Schwimmpunkt egal was die Präzision nicht vertreten werden. Softwarepakete, die vernünftige Arithmetik durchführen, vertreten Zahlen als Bruchteile mit dem integrierten Zähler und Nenner, und können deshalb jede rationale Zahl genau vertreten. Solche Pakete müssen allgemein "bignum" Arithmetik für die individuellen ganzen Zahlen verwenden.
  • Computeralgebra-Systeme wie Mathematica und Maxima können häufig irrationale Zahlen wie oder auf eine "völlig formelle" Weise behandeln, ohne sich mit einer spezifischen Verschlüsselung des significand zu befassen. Solche Programme können Ausdrücke wie "" genau bewerten, weil sie die zu Grunde liegende Mathematik "wissen".

Reihe von Schwimmpunkt-Zahlen

Indem

sie dem Basis-Punkt erlaubt wird, regulierbar zu sein, erlaubt Schwimmpunkt-Notation Berechnungen über eine breite Reihe von Umfängen mit einer festgelegten Zahl von Ziffern, während sie gute Präzision aufrechterhält. Zum Beispiel, in einem dezimalen Schwimmpunkt-System mit drei Ziffern, die Multiplikation, die Menschen als schreiben würden

:0.12 × 0.12 = 0.0144

würde als ausgedrückt

: (1.20) × (1.20) = (1.44).

In einem System des festen Punkts mit dem dezimalen Punkt am verlassenen würde es sein

:0.120 × 0.120 = 0.014.

Eine Ziffer des Ergebnisses wurde wegen der Unfähigkeit der Ziffern verloren, und Dezimalzahl weisen hin, um hinsichtlich einander innerhalb der Ziffer-Schnur 'zu schwimmen'.

Die Reihe von Schwimmpunkt-Zahlen hängt von der Zahl von Bit oder Ziffern ab, die für die Darstellung des significand (die positiven Ziffern der Zahl) und für die Hochzahl verwendet sind. Auf einem typischen Computersystem hat eine 'doppelte Präzision' binäre (64-Bit-)-Schwimmpunkt-Zahl einen Koeffizienten von 53 Bit (von denen einer einbezogen wird) haben eine Hochzahl von 11 Bit und ein Zeichen gebissen. Positive Schwimmpunkt-Zahlen in diesem Format haben eine ungefähre Reihe 10 bis 10, weil die Reihe der Hochzahl [1022,1023] ist und 308 ungefähr Klotz (2) ist. Die ganze Reihe des Formats ist von ungefähr 10 bis +10 (sieh IEEE 754).

Die Zahl von normalisierten Schwimmpunkt-Zahlen in einem System F (B, P, L, U) (wo B die Basis des Systems ist, ist P die Präzision des Systems zu P Zahlen, L, ist die kleinste Hochzahl, die im System und U wiederpräsentabel ist, ist die größte Hochzahl, die im System verwendet ist), ist:

.

Es gibt eine kleinste positive normalisierte Schwimmpunkt-Zahl,

Unterlauf-Niveau = UFL =

der 1 als die Hauptziffer und 0 für die restlichen Ziffern des significand und den kleinstmöglichen Wert für die Hochzahl hat.

Es gibt eine größte Schwimmpunkt-Zahl,

Überschwemmungsniveau = OFL =, der B  1 als der Wert für jede Ziffer des significand und der größtmögliche Wert für die Hochzahl hat.

Außerdem gibt es wiederpräsentable Werte ausschließlich zwischen UFL und UFL. Nämlich, negative und Nullnull, sowie unterdurchschnittliche Zahlen.

Geschichte

Leonardo Torres y Quevedo 1914 hat eine elektromechanische Version des Analytischen Motors von Charles Babbage entworfen, der Fließkommaarithmetik eingeschlossen hat.

1938 hat Konrad Zuse aus Berlin den Z1, den ersten mechanischen binären programmierbaren Computer vollendet, das war jedoch in der Operation unzuverlässig. Es hat mit binären 22-Bit-Schwimmpunkt-Zahlen gearbeitet, 7 Bit Hochzahl, 15 Bit significand (einschließlich eines impliziten Bit) unterzeichnend, und ein Zeichen hat gebissen. Das Gedächtnis hat das Schieben von Metallteilen verwendet, um 64 Wörter solcher Zahlen zu versorgen. Der relaisbasierte Z3, vollendet 1941 hatte Darstellungen für plus und minus die Unendlichkeit. Es hat definierte Operationen mit der Unendlichkeit solcher als durchgeführt und hat auf unbestimmten Operationen wie angehalten. Es hat auch die Quadratwurzel-Operation in der Hardware durchgeführt.

Zuse hat auch vorgehabt, aber, hat sorgfältig rund gemachte Fließkommaarithmetik nicht vollendet, die ±  und NaNs eingeschlossen hätte, Eigenschaften des IEEE Standardschwimmpunkts um vier Jahrzehnte voraussehend.

Im Vergleich hat von Neumann gegen den Schwimmpunkt für die IAS 1951-Maschine empfohlen, behauptend, dass befestigte Punkt-Arithmetik vorzuziehend war.

Der erste kommerzielle Computer mit der Schwimmpunkt-Hardware war der Z4 Computer von Zuse, der in 1942-1945 entworfen ist. Der GlockenlaborV-Zeichen-Computer hat dezimalen Schwimmpunkt 1946 durchgeführt.

Das Versuchs-ASS hatte binäre Schwimmpunkt-Arithmetik, die betrieblich am Nationalen Physischen Laboratorium, das Vereinigte Königreich 1950 geworden ist. Insgesamt 33 wurden später gewerblich als die englische Elektrische ZWEI verkauft. Die Arithmetik wurde wirklich als Unterprogramme durchgeführt, aber mit einer Ein-Megahertz-Uhr-Rate, der Geschwindigkeit von Schwimmpunkt-Operationen und hat Punkt befestigt war am Anfang schneller als viele konkurrierende Computer, und seitdem es nur Software war, hatte die ganze ZWEI es.

Serienmäßig hergestellter Tube-basierter Vakuum-IBM 704 ist 1954 gefolgt; es hat den Gebrauch einer voreingenommenen Hochzahl eingeführt. Viele Jahrzehnte lang danach war Schwimmpunkt-Hardware normalerweise eine optionale Zusatzeinrichtung, und, wie man sagte, waren Computer, die sie hatten, "wissenschaftliche Computer", oder hatten "wissenschaftliche" Rechenfähigkeit. Erst als der Start von Intel i486 1989, dass Mehrzweckpersonalcomputer Schwimmpunkt-Fähigkeit in der Hardware als Standard hatten.

Der UNIVAC 1100/2200 Reihe, eingeführt 1962, hat zwei Schwimmpunkt-Formate unterstützt. Einfache Präzision hat 36 Bit verwendet, die in ein 1-Bit-Zeichen, eine 8-Bit-Hochzahl, und 27 Bit significand organisiert sind. Doppelte Präzision hat 72 Bit organisiert als ein 1-Bit-Zeichen, eine 11-Bit-Hochzahl, und 60 Bit significand verwendet. IBM 7094, eingeführt dasselbe Jahr, hat auch einzelne und doppelte Präzision mit ein bisschen verschiedenen Formaten unterstützt.

Vor dem IEEE-754 Standard haben Computer viele verschiedene Formen des Schwimmpunkts verwendet. Diese haben sich in den Wortgrößen, dem Format der Darstellungen und dem sich rundenden Verhalten von Operationen unterschieden. Diese sich unterscheidenden Systeme haben verschiedene Teile der Arithmetik in der Hardware und Software mit der unterschiedlichen Genauigkeit durchgeführt.

Der IEEE-754 Standard wurde am Anfang der 1980er Jahre geschaffen, nachdem Wortgrößen von 32 Bit (oder 16 oder 64) allgemein darauf gesetzt worden waren. Das hat auf einem Vorschlag von Intel basiert, die das i8087 numerische Coprozessor entwarfen. Prof. W. Kahan war der primäre Architekt hinter diesem Vorschlag, zusammen mit seinem Studenten Jerome Coonen an U.C. Berkeley und Besuch-Prof. Harold Stone, für den er den 1989-Preis von Turing zuerkannte. Unter den Neuerungen sind diese:

  • Eine genau angegebene Verschlüsselung der Bit, so dass alle entgegenkommenden Computer Bit interpretieren würden, gestaltet denselben Weg. Das hat es möglich gemacht, Schwimmpunkt-Zahlen von einem Computer bis einen anderen zu übertragen.
  • Ein genau angegebenes Verhalten der arithmetischen Operationen: Arithmetische Operationen waren erforderlich, richtig rund gemacht zu werden, d. h. dasselbe Ergebnis zu geben, als ob ungeheuer genaue Arithmetik verwendet und dann rund gemacht wurde. Das hat bedeutet, dass ein gegebenes Programm, mit gegebenen Daten, immer dasselbe Ergebnis auf jedem entgegenkommenden Computer erzeugen würde. Das hat geholfen, den fast mystischen Ruf zu reduzieren, den Schwimmpunkt-Berechnung für das anscheinend nichtdeterministische Verhalten hatte.
  • Die Fähigkeit von außergewöhnlichen Bedingungen (Überschwemmung, teilen Sie sich durch die Null, usw.), sich durch eine Berechnung auf eine gütige Weise fortzupflanzen und durch die Software auf eine kontrollierte Weise behandelt zu werden.

IEEE 754: das Schwimmen des Punkts in modernen Computern

Der IEEE hat die Computerdarstellung für binäre Schwimmpunkt-Zahlen in IEEE 754 standardisiert (auch bekannt als. IEC 60559). Diesem Standard wird von fast allen modernen Maschinen gefolgt. Bemerkenswerte Ausnahmen schließen Großrechner von IBM ein, die das eigene Format von IBM unterstützen (zusätzlich zum IEEE 754 binäre und dezimale Formate), und Vektor-Maschinen von Cray, wo die T90 Reihe eine IEEE Version hatte, aber der SV1 verwendet noch Schwimmpunkt-Format von Cray.

Der Standard sorgt für viele nah zusammenhängende Formate, sich in nur einigen Details unterscheidend. Fünf dieser Formate werden grundlegende Formate genannt, und andere werden erweiterte Formate genannt, und drei von diesen werden besonders in der Computerhardware und den Sprachen weit verwendet:

  • Einfache Präzision, genannt "Hin- und Herbewegung" in der Familie der c Sprache, und "echt" oder "real*4" in Fortran. Das ist ein binäres Format, das 32 Bit (4 Bytes) besetzt und sein significand eine Präzision von 24 Bit (ungefähr 7 dezimale Ziffern) hat.
  • Doppelte Präzision, genannt "doppelt" in der Familie der c Sprache, und "der doppelten Präzision" oder "dem real*8" in Fortran. Das ist ein binäres Format, das 64 Bit (8 Bytes) besetzt und sein significand eine Präzision von 53 Bit (ungefähr 16 dezimale Ziffern) hat.
  • Doppeltes verlängertes Format, 80 Bit, die Punkt-Wert schwimmen lassen. Das wird auf den meisten Personalcomputern, aber nicht auf anderen Geräten durchgeführt. Manchmal "verdoppeln sich lange" wird dafür in der Familie der c Sprache verwendet (der C99 und die C11 Standards "IEC 60559 Fließkommaarithmetik-Erweiterung - Anhang F" empfiehlt den 80 Bit erweitertes Format, das als "lange doppelt" zur Verfügung zu stellen ist, wenn verfügbar), obwohl sich "lange verdoppeln", kann ein Synonym für "den doppelten" sein oder kann für vierfache Präzision eintreten. Verlängerte Präzision kann helfen, Anhäufung der Runde - vom Fehler in Zwischenberechnungen zu minimieren.

Weniger Standardformate schließen ein:

  • Die anderen grundlegenden Formate vierfache Präzision dezimaler und binärer (128-Bit-)-Schwimmpunkt (64 Bit) und "doppelter" (128 Bit) dezimaler Schwimmpunkt.
  • Hälfte, auch genannt float16, 16 Bit, die Punkt-Wert schwimmen lassen.

Jede ganze Zahl mit dem absoluten Wert weniger als oder gleich 2 kann im Format der einfachen Präzision genau vertreten werden, und jede ganze Zahl mit dem absoluten Wert weniger als oder gleich 2 kann im doppelten Präzisionsformat genau vertreten werden. Außerdem kann eine breite Reihe von Mächten von 2mal solch einer Zahl vertreten werden. Diese Eigenschaften werden manchmal für rein Daten der ganzen Zahl verwendet, um ganze 53-Bit-Zahlen auf Plattformen zu bekommen, die doppelte Präzisionshin- und Herbewegungen, aber nur 32 Bit ganze Zahlen haben.

Der Standard gibt einige spezielle Werte und ihre Darstellung an: Positive Unendlichkeit (+ ), negative Unendlichkeit (), eine negative Null (0), die von der gewöhnlichen ("positiven") Null, und "nicht einer Zahl" Werte (NaNs) verschieden ist.

Der Vergleich von Schwimmpunkt-Zahlen, wie definiert, durch den IEEE Standard, ist ein bisschen vom üblichen Vergleich der ganzen Zahl verschieden. Negative und positive Null vergleicht sich gleich, und jeder NaN vergleicht sich ungleich jedem Wert, einschließlich sich. Alle Werte außer NaN sind ausschließlich kleiner als +  und ausschließlich größer als &minus;. Begrenzte Schwimmpunkt-Zahlen werden ebenso als ihre Werte (im Satz von reellen Zahlen) bestellt.

Zu einer rauen Annäherung ist die Bit-Darstellung einer IEEE binären Schwimmpunkt-Zahl zu seiner Basis 2 Logarithmen mit einem durchschnittlichen Fehler von ungefähr 3 % proportional. (Das ist, weil das Hochzahl-Feld im bedeutenderen Teil der Gegebenheit ist.) Das kann in einigen Anwendungen wie Volumen ausgenutzt werden, das sich in der gesunden Digitalverarbeitung aufrichtet.

Ein Projekt, für den IEEE zu revidieren 754 Standard wurde 2000 angefangen (sieh IEEE 754 Revision); es wurde vollendet und hat im Juni 2008 genehmigt. Es schließt dezimale Schwimmpunkt-Formate ein, und 16 Bit, die Punkt-Format ("binary16"). binary16 schwimmen lassen, hat dieselbe Struktur und herrscht, wie die älteren Formate, mit 1 Zeichen, 5 Hochzahl-Bit und das 10 Schleppen significand Bit gebissen hat. Es wird auf der NVIDIA Cg-Grafiksprache, und im openEXR Standard verwendet.

Innere Darstellung

Schwimmpunkt-Zahlen sind normalerweise in eine Computergegebenheit gepackt, weil das Zeichen, das Hochzahl-Feld und der significand (mantissa) vom linken bis Recht gebissen hat. Für den IEEE 754 binäre Formate (grundlegend und erweitert), die noch vorhandene Hardware-Durchführungen haben, werden sie wie folgt aufgeteilt:

Während die Hochzahl positiv oder negativ sein kann, in binären Formaten wird sie als eine nicht unterzeichnete Zahl versorgt, die eine feste dazu hinzugefügte "Neigung" hat. Werte des ganzen 0s in diesem Feld werden für die Nullen und unterdurchschnittlichen Zahlen vorbestellt, Werte von allen 1s werden für die Unendlichkeit und NaNs vorbestellt. Die Hochzahl-Reihe für normalisierte Zahlen ist [126, 127] für die einfache Präzision, [1022, 1023] für den doppelten, oder [16382, 16383] für das Viererkabel. Normalisierte Zahlen schließen unterdurchschnittliche Werte, Nullen, Unendlichkeit und NaNs aus.

In den IEEE binären Austausch-Formaten wird das führende 1 Bit eines normalisierten significand in der Computergegebenheit nicht wirklich versorgt. Es wird das "verborgene" oder "implizite" Bit genannt. Wegen dessen hat Format der einfachen Präzision wirklich einen significand mit 24 Bit der Präzision, doppeltes Präzisionsformat hat 53, und Viererkabel hat 113.

Zum Beispiel wurde es über diesem π gezeigt, der zu 24 Bit der Präzision rund gemacht ist, hat:

  • unterzeichnen Sie = 0; e = 1; s = 110010010000111111011011 (einschließlich des verborgenen Bit)

Die Summe der Hochzahl-Neigung (127) und die Hochzahl (1) ist 128, so wird das im Format der einfachen Präzision als vertreten

  • 0 10000000 10010010000111111011011 (des verborgenen Bit ausschließend), = 40490FDB als eine hexadecimal Zahl.

Spezielle Werte

Unterzeichnete Null

Im IEEE 754 Standard wird Null unterzeichnet, bedeutend, dass dort sowohl eine "positive Null" (+0) als auch eine "negative Null" (0) bestehen. In den meisten Laufzeitumgebungen wird positive Null gewöhnlich als "0" gedruckt, während negative Null als "-0" gedruckt werden kann. Die zwei Werte benehmen sich als gleich in numerischen Vergleichen, aber einige Operationen geben verschiedene Ergebnisse für +0 und 0 zurück. Zum Beispiel, 1 / ( 0) gibt negative Unendlichkeit (genau) zurück, während 1 / + 0 Umsatz positive Unendlichkeit (genau) (so dass die Identität 1 / (1/± ) = ±  aufrechterhalten wird). Ein Zeichen symmetrische arccot Operation wird verschiedene Ergebnisse für +0 und 0 ohne jede Ausnahme geben. Der Unterschied zwischen +0 und 0 ist für komplizierte Operationen an so genannten Zweigkürzungen größtenteils bemerkenswert.

Unterdurchschnittliche Zahlen

Unterdurchschnittliche Werte schließen die Unterlauf-Lücke mit Werten

wo die absolute Entfernung zwischen ihnen dasselbe bezüglich ist

angrenzende Werte gerade außerhalb der Unterlauf-Lücke.

Das ist eine Verbesserung über die ältere Praxis, um gerade Null in der Unterlauf-Lücke, zu haben

und wo Underflowing-Ergebnisse durch die Null (Erröten zur Null) ersetzt wurden.

Moderne Schwimmpunkt-Hardware behandelt gewöhnlich unterdurchschnittliche Werte (sowie normale Werte),

und verlangt Softwarewetteifer für subnormals nicht.

Unendlichkeit

Die Unendlichkeit der verlängerten Linie der reellen Zahl kann in IEEE vertreten werden, der Punkt datatypes, schwimmen lässt

gerade wie der gewöhnliche Schwimmpunkt schätzt wie 1, 1.5 usw.

Sie sind nicht Fehlerwerte in jedem Fall, obwohl sie häufig sind (aber nicht immer, weil es vom Runden abhängt) verwendet als

Neuwert, wenn es eine Überschwemmung gibt. Nach einem Teilen durch die Nullausnahme,

eine positive oder negative Unendlichkeit wird als ein genaues Ergebnis zurückgegeben. Eine Unendlichkeit kann auch als eingeführt werden

eine Ziffer (wie "die UNENDLICHKEIT" von C Makro-, oder "", wenn die Programmiersprache diese Syntax erlaubt).

IEEE 754 verlangt, dass Unendlichkeit auf eine angemessene Weise wie behandelt wird

  • (+ ) + (+7) = (+ )
  • (+ ) × (2) = ()
  • (+ ) × 0 = NaN - es gibt kein bedeutungsvolles Ding, zu tun

NaNs

IEEE 754 gibt einen speziellen Wert genannt "Nicht eine Zahl" (NaN) an, der als das Ergebnis von bestimmten "ungültigen" Operationen, wie 0/0, ×0, oder sqrt (1) zurückzugeben ist. Im Allgemeinen wird NaNs fortgepflanzt, d. h. die meisten Operationen, die mit NaN verbunden sind, werden auf NaN hinauslaufen, obwohl Funktionen, die ein definiertes Ergebnis für jeden gegebenen Schwimmpunkt-Wert geben würden, so für NaNs ebenso z.B tun werden. NaN ^ 0 == 1. Es gibt zwei Arten von NaNs: der Verzug ruhiger NaNs und fakultativ NaNs Zeichen gebend. SignalnaN in jeder arithmetischen Operation (einschließlich numerischer Vergleiche) wird eine "ungültige" Ausnahme veranlassen, Zeichen gegeben zu werden.

Die Darstellung von durch den Standard angegebenem NaNs hat einige unangegebene Bit, die verwendet werden konnten, um den Typ oder die Quelle des Fehlers zu verschlüsseln; aber es gibt keinen Standard für diese Verschlüsselung. In der Theorie, NaNs Zeichen gebend, konnte durch ein Laufzeitsystem verwendet werden, um uninitialisierte Variablen zu beflaggen, oder die Schwimmpunkt-Zahlen mit anderen speziellen Werten zu erweitern, ohne die Berechnung mit gewöhnlichen Werten zu verlangsamen, obwohl solche Erweiterungen nicht üblich sind.

IEEE 754 Designgrundprinzip

Es ist ein häufiger Irrtum, dass die esoterischeren Eigenschaften des IEEE 754 Standard besprochen hier, wie erweiterte Formate, NaN, Unendlichkeit, subnormals usw., nur numerischen Analytikern, oder für fortgeschrittene numerische Anwendungen von Interesse sind; tatsächlich ist das Gegenteil wahr: Diese Eigenschaften werden entworfen, um sicheren robusten Verzug für numerisch unverfälschte Programmierer, zusätzlich zum Unterstützen hoch entwickelter numerischer Bibliotheken durch Experten zu geben. Der Schlüsselentwerfer von IEEE 754, Prof. W. Kahan bemerkt, dass es zu falsch ist, "... [halten] Eigenschaften von IEEE Normalen 754 für das Binäre Schwimmen - Punkt-Arithmetik, die... nicht geschätzt werden, um Eigenschaften zu sein, die durch niemanden außer numerischen Experten verwendbar sind. Die Tatsachen sind gerade das Gegenteil. 1977 wurden jene Eigenschaften in Intel 8087 entworfen, um dem breitestmöglichen Markt zu dienen.... Fehleranalyse erzählt uns, wie man Fließkommaarithmetik wie IEEE Normale 754 entwirft, die gemäßigt der gut gemeinten Unerfahrenheit unter Programmierern tolerant sind".

  • Die speziellen Werte wie Unendlichkeit und NaN stellen sicher, dass die Schwimmpunkt-Arithmetik algebraisch vollendet, solch wird, dass jede Schwimmpunkt-Operation ein bestimmtes Ergebnis erzeugt und nicht durch den Verzug wird eine Maschinenunterbrechung oder Falle werfen. Außerdem wurden die Wahlen von speziellen in Ausnahmefällen zurückgegebenen Werten entworfen, um die richtige Antwort in vielen Fällen, z.B fortlaufende Bruchteile wie R (z) zu geben: = werden 7  3 / (z  2  1 / (z  7 + 10 / (z  2  2 / (z  3)))) die richtige Antwort in allen Eingängen unter der IEEE-754 Arithmetik geben, weil sich das Potenzial durch die Null in z.B teilt. R (3) =4.6 wird als +infinity richtig behandelt und kann so sicher ignoriert werden. Wie bemerkt, durch Kahan hätte die unbehandelte Schwimmpunkt-Überschwemmungsausnahme, die den Verlust einer Ariane 5 Rakete verursacht hat, unter IEEE 754 Schwimmpunkt nicht zufällig.
  • Unterdurchschnittliche Zahlen stellen sicher, dass x - y == 0 wenn und nur wenn x == y, wie erwartet, aber der unter früheren Schwimmpunkt-Darstellungen nicht gehalten hat.
  • Auf dem Designgrundprinzip des x87 80-Bit-Formats bemerkt Prof. Kahan:" Dieses Verlängerte Format wird entworfen, um, mit dem unwesentlichen Verlust der Geschwindigkeit, für alle außer der einfachsten Arithmetik mit der Hin- und Herbewegung verwendet zu werden und operands zu verdoppeln. Zum Beispiel sollte es für Kratzer-Variablen in Schleifen verwendet werden, die Wiederauftreten wie polynomische Einschätzung, Skalarprodukte, teilweise und fortlaufende Bruchteile durchführen. Es wendet häufig vorzeitig oder strenge lokale Annullierung ab, die einfache Algorithmen verderben kann. Rechenzwischenglied läuft auf ein verlängertes Format mit der hohen Präzision hinaus, und erweiterte Hochzahl hat Präzedenzfälle in der historischen Praxis der wissenschaftlichen Berechnung und im Design von wissenschaftlichen Rechenmaschinen z.B Hewlett Packard - Finanzrechenmaschinen haben Arithmetik und Finanzfunktionen zu drei bedeutenderen Dezimalzahlen durchgeführt, als sie versorgt haben oder gezeigt haben. Die Durchführung der verlängerten Präzision hat Standardelementarfunktionsbibliotheken ermöglicht, sogleich entwickelt zu werden, der normalerweise doppelte Präzisionsergebnisse innerhalb einer Einheit im letzten Platz (ULP) mit der hohen Geschwindigkeit gegeben hat.
  • Das richtige Runden von Werten zum nächsten wiederpräsentablen Wert vermeidet systematische Neigungen in Berechnungen und verlangsamt das Wachstum von Fehlern. Das Runden von Banden dazu entfernt sogar die statistische Neigung, die im Hinzufügen ähnlicher Zahlen vorkommen kann.
  • Das geleitete Runden war als eine Hilfe mit der Überprüfung von Fehlergrenzen zum Beispiel in der Zwischenraum-Arithmetik beabsichtigt. Es wird auch in der Durchführung von einigen Funktionen verwendet.
  • Die mathematische Basis der Operationen hat hohen Präzisionsmehrwortarithmetik-Unterprogrammen ermöglicht, relativ leicht gebaut zu werden.
  • Die einzelnen und doppelten Präzisionsformate wurden entworfen, um zur Sorte leicht zu sein, ohne Schwimmpunkt-Hardware zu verwenden.

Wiederpräsentable Zahlen, Konvertierung und das Runden

Durch ihre Natur sind alle im Schwimmpunkt-Format ausgedrückten Zahlen rationale Zahlen mit einer endenden Vergrößerung in der relevanten Basis (zum Beispiel, einer endenden dezimalen Vergrößerung in der Basis 10, oder eine endende Binärentwicklung in der Basis 2). Irrationalen Zahlen, wie π oder 2, oder rationale Zahlen nichtbegrenzend, muss näher gekommen werden. Die Zahl von Ziffern (oder Bit) der Präzision beschränkt auch den Satz von rationalen Zahlen, die genau vertreten werden können. Zum Beispiel kann die Nummer 123456789 nicht genau vertreten werden, wenn nur acht dezimale Ziffern der Präzision verfügbar sind.

Wenn eine Zahl in einem Format vertreten wird (wie eine Charakter-Schnur), der nicht eine heimische in einer Computerdurchführung unterstützte Schwimmpunkt-Darstellung ist, dann wird es eine Konvertierung verlangen, bevor es in dieser Durchführung verwendet werden kann. Wenn die Zahl genau im Schwimmpunkt-Format dann vertreten werden kann, ist die Konvertierung genau. Wenn es nicht eine genaue Darstellung dann gibt, verlangt die Konvertierung eine Wahl der Schwimmpunkt-Zahl zu verwenden, um den ursprünglichen Wert zu vertreten. Die gewählte Darstellung wird einen verschiedenen Wert zum Original haben, und der so angepasste Wert wird den rund gemachten Wert genannt.

Ob eine rationale Zahl eine endende Vergrößerung hat, hängt von der Basis ab. Zum Beispiel in der Basis 10 hat die Nummer 1/2 eine endende Vergrößerung (0.5), während die Nummer 1/3 nicht (0.333...) tut. In der Basis 2 nur rationals mit Nennern, die Mächte 2 sind (wie 1/2 oder 3/16) enden. Irgendwelcher, der mit einem Nenner vernünftig ist, der einen Hauptfaktor außer 2 hat, wird eine unendliche Binärentwicklung haben. Das bedeutet, dass Zahlen, die scheinen, kurz und wenn geschrieben, im dezimalen Format genau zu sein, eventuell, wenn umgewandelt, zum binären Schwimmpunkt näher gekommen werden müssen. Zum Beispiel ist die Dezimalzahl 0.1 im binären Schwimmpunkt jeder begrenzten Präzision nicht wiederpräsentabel; die genaue binäre Darstellung würde "1100" Folge haben, die endlos weitergeht:

:e = 4; s = 1100110011001100110011001100110011...,

wo, als vorher, s der significand ist und e die Hochzahl ist.

Wenn rund gemacht, zu 24 Bit wird das

:e = 4; s = 110011001100110011001101,

der wirklich 0.100000001490116119384765625 in der Dezimalzahl ist.

Als ein weiteres Beispiel, die reelle Zahl π, vertreten in der Dualzahl weil ist eine unendliche Reihe von Bit

:11.0010010000111111011010101000100010000101101000110000100011010011...

aber ist

:11.0010010000111111011011

wenn näher gekommen, durch das Runden zu einer Präzision von 24 Bit.

Im binären Schwimmpunkt der einfachen Präzision wird das als s = 1.10010010000111111011011 mit e = 1 vertreten.

Das hat einen dezimalen Wert von

:3.1415927410125732421875,

wohingegen eine genauere Annäherung des wahren Werts von π ist

:3.14159265358979323846264338327950...

Das Ergebnis des Rundens unterscheidet sich vom wahren Wert durch ungefähr 0.03 Teile pro Million, und vergleicht die Dezimaldarstellung von π in den ersten 7 Ziffern. Der Unterschied ist der discretization Fehler und wird durch das Maschinenepsilon beschränkt.

Der arithmetische Unterschied zwischen zwei wiederpräsentablen Konsekutivschwimmpunkt-Zahlen, die dieselbe Hochzahl haben, wird eine Einheit im letzten Platz (ULP) genannt. Zum Beispiel, wenn es keine wiederpräsentable Zahl gibt, die zwischen den wiederpräsentablen Nummern 1.45a70c22 und 1.45a70c24 liegt, ist der ULP 2&times;16, oder 2. Für Zahlen mit einer Hochzahl 0 ist ein ULP genau 2 oder ungefähr 10 in der einfachen Präzision und ungefähr 10 in der doppelten Präzision. Das beauftragte Verhalten der IEEE-entgegenkommenden Hardware besteht darin, dass das Ergebnis innerhalb einer Hälfte eines ULP ist.

Das Runden von Weisen

Das Runden wird verwendet, wenn das genaue Ergebnis einer Schwimmpunkt-Operation (oder eine Konvertierung zum Schwimmpunkt-Format) mehr Ziffern brauchen würde als, gibt es Ziffern im significand. IEEE 754 verlangt das richtige Runden: D. h. das rund gemachte Ergebnis besteht darin, als ob ungeheuer genaue Arithmetik verwendet wurde, um den Wert und dann rund gemacht zu schätzen (obwohl in der Durchführung nur drei Extrabit erforderlich sind, um das zu sichern). Es gibt mehrere verschiedene sich rundende Schemas (oder das Runden von Weisen). Historisch war Stutzung die typische Annäherung. Seit der Einführung von IEEE 754 wird die Verzug-Methode (herum zum nächsten, den Banden zu sogar, manchmal genannt das Runden des Bankiers) allgemeiner verwendet. Diese Methode Runden das ideale (ungeheuer genaue) Ergebnis einer arithmetischen Operation zum nächsten wiederpräsentablen Wert, und gibt diese Darstellung als das Ergebnis. Im Fall von einem Band wird der Wert, der den significand in einer gleichen Ziffer würde enden lassen, gewählt. Der IEEE 754 Standard verlangt, dass dasselbe Runden auf alle grundsätzlichen algebraischen Operationen, einschließlich der Quadratwurzel und Konvertierungen angewandt wird, wenn es einen numerischen (non-NaN) Ergebnis gibt. Es bedeutet, dass die Ergebnisse von IEEE 754 Operationen in allen Bit des Ergebnisses abgesehen von der Darstellung von NaNs völlig bestimmt werden. ((Bibliotheks)-Funktionen wie Kosinus und Klotz werden nicht beauftragt.)

Alternative sich rundende Optionen sind auch verfügbar. IEEE 754 gibt die folgenden sich rundenden Weisen an:

  • herum zum nächsten, wo Bande herum zur nächsten gleichen Ziffer in der erforderlichen Position (der Verzug und bei weitem die allgemeinste Weise)
  • herum zum nächsten, wo Bande herum weg von der Null (fakultativ für den binären Schwimmpunkt und allgemein verwendet in der Dezimalzahl)
  • Zusammenfassung (zu + ; negative Ergebnisse so herum zur Null)
  • runden Sie nach unten ab (zu ; negative Ergebnisse so herum weg von der Null)
  • herum zur Null (Stutzung; es ist dem allgemeinen Verhalten von Konvertierungen der Hin- und Herbewegung zur ganzer Zahl ähnlich, die sich 3.9 zu 3 und 3.9 zu 3) umwandeln

Alternative Weisen sind nützlich, wenn der Betrag des Fehlers, der wird einführt, begrenzt werden muss. Anwendungen, die einen begrenzten Fehler verlangen, sind Mehrpräzisionsschwimmpunkt und Zwischenraum-Arithmetik.

Die alternativen sich rundenden Weisen sind auch im Diagnostizieren numerischer Instabilität nützlich: Wenn sich die Ergebnisse eines Unterprogramms wesentlich zwischen dem Runden zu + und - Unendlichkeit dann ändern, ist es numerisch nicht stabil und betroffen durch die Runde - vom Fehler wahrscheinlich.

Ein weiterer Gebrauch des Rundens besteht darin, wenn eine Zahl zu einer bestimmten Anzahl der Dezimalzahl (oder binär) Plätze, als ausführlich rund gemacht wird, wenn man ein Ergebnis zu Euro und Cents (zwei dezimale Plätze) rund macht.

Fließkommaarithmetik-Operationen

Für die Bequemlichkeit der Präsentation und des Verstehens wird die dezimale Basis mit 7 Ziffer-Präzision in den Beispielen, als im IEEE 754 Decimal32-Format verwendet. Die grundsätzlichen Grundsätze sind dasselbe in jeder Basis oder Präzision, außer dass Normalisierung fakultativ ist (es betrifft den numerischen Wert des Ergebnisses nicht). Hier zeigt s den significand an, und e zeigt die Hochzahl an.

Hinzufügung und Subtraktion

Eine einfache Methode, Schwimmpunkt-Zahlen hinzuzufügen, soll sie zuerst mit derselben Hochzahl vertreten. Im Beispiel unten wird die zweite Zahl direkt durch drei Ziffern ausgewechselt, und wir fahren dann mit der üblichen Hinzufügungsmethode fort:

123456.7 = 1.234567 × 10^5

101.7654 = 1.017654 × 10^2 = 0.001017654 × 10^5

Folglich:

123456.7 + 101.7654 = (1.234567 × 10^5) + (1.017654 × 10^2)

= (1.234567 × 10^5) + (0.001017654 × 10^5)

= (1.234567 + 0.001017654) × 10^5

= 1.235584654 × 10^5

Im Detail:

e=5; s=1.234567 (123456.7)

+ e=2; s=1.017654 (101.7654)

e=5; s=1.234567

+ e=5; s=0.001017654 (nach der Verschiebung)

--------------------

e=5; s=1.235584654 (wahre Summe: 123558.4654)

Das ist das wahre Ergebnis, die genaue Summe des operands. Es wird zu sieben Ziffern rund gemacht und dann nötigenfalls normalisiert. Das Endresultat ist

e=5; s=1.235585 (Endsumme: 123558.5)

Bemerken Sie, dass die niedrigen 3 Ziffern des zweiten operand (654) im Wesentlichen verloren werden. Das ist - vom Fehler rund. In äußersten Fällen kann die Summe von zwei Nichtnullzahlen einem von ihnen gleich sein:

e=5; s=1.234567

+ e =  3; s=9.876543

e=5; s=1.234567

+ e=5; s=0.00000009876543 (nach der Verschiebung)

----------------------

e=5; s=1.23456709876543 (wahre Summe)

e=5; s=1.234567 (nach dem Runden/Normalisierung)

Bemerken Sie, dass in den obengenannten Begriffsbeispielen es scheinen würde, dass eine Vielzahl von Extraziffern durch die Viper würde zur Verfügung gestellt werden müssen, um das richtige Runden zu sichern: Tatsächlich für die binäre Hinzufügung oder Subtraktion mit sorgfältigen Durchführungstechniken müssen nur zwei Extrawächter-Bit und ein klebriges Extrabit außer der Präzision des operands getragen werden.

Ein anderes Problem des Verlustes der Bedeutung kommt vor, wenn zwei nahe Zahlen abgezogen werden. Im folgenden Beispiel e = 5; s = 1.234571 und e = 5; s = 1.234567 sind Darstellungen des rationals 123457.1467 und 123456.659.

e=5; s=1.234571

 e=5; s=1.234567

----------------

e=5; s=0.000004

e =  1; s=4.000000 (nach dem Runden/Normalisierung)

Die beste Darstellung dieses Unterschieds ist e = 1; s = 4.877000, der sich mehr als 20 % von e = 1 unterscheidet; s = 4.000000. In äußersten Fällen können alle positiven Ziffern der Präzision verloren werden (obwohl allmählicher Unterlauf sicherstellt, dass das Ergebnis Null nicht sein wird, wenn die zwei operands nicht gleich waren). Diese Annullierung illustriert die Gefahr im Annehmen, dass alle Ziffern eines geschätzten Ergebnisses bedeutungsvoll sind. Das Befassen mit den Folgen dieser Fehler ist ein Thema in der numerischen Analyse; sieh auch Genauigkeitsprobleme.

Multiplikation und Abteilung

Um zu multiplizieren, werden die significands multipliziert, während die Hochzahlen hinzugefügt werden, und das Ergebnis rund gemacht und normalisiert wird.

e=3; s=4.734612

× e=5; s=5.417242

-----------------------

e=8; s=25.648538980104 (wahres Produkt)

e=8; s=25.64854 (nach dem Runden)

e=9; s=2.564854 (nach der Normalisierung)

Ähnlich wird Abteilung durch das Abziehen der Hochzahl des Teilers von der Hochzahl der Dividende und das Teilen des significand der Dividende durch den significand des Teilers vollbracht.

Es gibt keine Annullierungs- oder Absorptionsprobleme mit der Multiplikation oder Abteilung, obwohl kleine Fehler anwachsen können, weil Operationen in der Folge durchgeführt werden. In der Praxis kann die Weise, wie diese Operationen in der Digitallogik ausgeführt werden, ziemlich kompliziert sein (sieh den Multiplikationsalgorithmus der Kabine und Digitalabteilung).

Für eine schnelle, einfache Methode, sieh die Methode von Horner.

Sich mit Ausnahmefällen befassend

Die Schwimmpunkt-Berechnung in einem Computer kann in drei Arten von Problemen geraten:

  • Eine Operation, kann wie  / , oder Abteilung durch die Null mathematisch unbestimmt sein.
  • Eine Operation kann im Prinzip, aber nicht unterstützt durch das spezifische Format gesetzlich sein, zum Beispiel die Quadratwurzel 1 oder den umgekehrten Sinus 2 berechnend (von denen beide auf komplexe Zahlen hinauslaufen).
  • Eine Operation kann im Prinzip gesetzlich sein, aber das Ergebnis kann unmöglich sein, im angegebenen Format zu vertreten, weil die Hochzahl zu groß oder zu klein ist, um im Hochzahl-Feld zu verschlüsseln. Solch ein Ereignis wird eine Überschwemmung (Hochzahl zu groß), Unterlauf (Hochzahl zu klein) oder denormalization (Präzisionsverlust) genannt.

Vor dem IEEE Standard haben solche Bedingungen gewöhnlich das Programm veranlasst zu enden, oder haben eine Art ausgelöst

der Falle, die der Programmierer im Stande sein könnte zu fangen. Wie das gearbeitet hat, war anlagenabhängig

das Bedeuten, dass Schwimmpunkt-Programme nicht tragbar waren. (Bemerken Sie, dass der Begriff "Ausnahme", wie verwendet, in IEEE-754 ein allgemeiner Begriff ist, der eine außergewöhnliche Bedingung bedeutet, die nicht notwendigerweise ein Fehler ist, und ein verschiedener Gebrauch zu dieser normalerweise definiert auf Programmiersprachen wie ein C ++ oder Java ist, in dem eine "Ausnahme" ein alternativer Fluss der Kontrolle ist, die daran näher ist, was eine "Falle" in der IEEE-754 Fachsprache genannt wird).

Hier wird die erforderliche Verzug-Methode, Ausnahmen gemäß IEEE 754 zu behandeln, besprochen (das IEEE-754 fakultative Abfangen, und andere "abwechselnde Ausnahme, die" Weisen behandelt, werden nicht besprochen). Arithmetische Ausnahmen sind (standardmäßig) erforderlich, in "klebrigen" Status-Fahne-Bit registriert zu werden. Dass sie "klebrig" sind, bedeutet, dass sie durch die folgende (arithmetische) Operation nicht neu gefasst werden, aber gesetzt, bis ausführlich neu gefasst, bleiben. Der Gebrauch von "klebrigen" Fahnen berücksichtigt so Prüfung von außergewöhnlichen Bedingungen, bis einen vollen Schwimmpunkt-Ausdruck oder Unterprogramm verzögert zu werden: Ohne sie würden außergewöhnliche Bedingungen, die nicht sonst ignoriert werden konnten, ausführliche Prüfung sofort nach jeder Schwimmpunkt-Operation verlangen. Standardmäßig gibt eine Operation immer ein Ergebnis gemäß der Spezifizierung zurück, ohne Berechnung zu unterbrechen. Zum Beispiel kehrt 1/0 +  zurück, während auch das Setzen der durch die Null teilen Fahne gebissen hat (dieser Verzug von  wird entworfen, um häufig ein begrenztes Ergebnis, wenn verwendet, in nachfolgenden Operationen zurückzugeben und so sicher ignoriert werden).

Der ursprüngliche IEEE 754 Standard hat jedoch gescheitert, Operationen zu empfehlen, solche Sätze von arithmetischen Ausnahme-Fahne-Bit zu behandeln. So, während diese in der Hardware durchgeführt wurden, haben am Anfang Programmiersprache-Durchführungen normalerweise kein Mittel zur Verfügung gestellt, auf sie (abgesondert vom Monteur) zuzugreifen. Mit der Zeit sind einige Programmiersprache-Standards (z.B, C99/C11 und Fortran) aktualisiert worden, um Methoden anzugeben, auf Status-Fahne-Bit zuzugreifen und sie zu ändern. Die 2008-Version des IEEE 754 Standard gibt jetzt einige Operationen an, wegen auf die arithmetischen Fahne-Bit zuzugreifen und sie zu behandeln. Das Programmiermodell basiert auf einem einzelnen Faden der Ausführung, und der Gebrauch von ihnen durch vielfache Fäden muss durch ein Mittel außerhalb des Standards behandelt werden (z.B. C11 gibt an, dass die Fahnen mit dem Faden lokale Lagerung haben).

IEEE 754 gibt fünf arithmetische Ausnahmen an, die in den Status-Fahnen ("klebrige Bit") registriert werden sollen:

  • ungenau Satz wenn das rund gemachte (und ist zurückgekehrt), ist Wert vom mathematisch genauen Ergebnis der Operation verschieden.
  • Unterlauf, Satz, wenn der rund gemachte Wert (wie angegeben, in IEEE 754) winzig und ungenau ist (oder vielleicht beschränkt darauf, wenn es denormalisation Verlust, laut der 1984-Version von IEEE 754 hat), einen unterdurchschnittlichen Wert einschließlich der Nullen zurückgebend.
  • Überschwemmung, Satz, wenn der absolute Wert des rund gemachten Werts zu groß ist, um vertreten zu werden. Eine Unendlichkeit oder maximaler begrenzter Wert werden zurückgegeben, abhängig von dem das Runden verwendet wird.
  • teilen Sie sich durch die Null, gehen Sie unter, wenn das Ergebnis unendlicher gegebener begrenzter operands ist, eine Unendlichkeit, entweder +  oder  zurückgebend.
  • Invalide, Satz, wenn ein reellwertiges Ergebnis z.B sqrt (1) oder 0/0 nicht zurückgegeben werden kann, ruhigen NaN zurückgebend.

Der Verzug-Rückwert für jede der Ausnahmen wird entworfen, um das richtige zu geben, laufen auf die Mehrheit von solchen Fällen hinaus, dass die Ausnahmen in der Mehrheit von Codes ignoriert werden können. ungenauer Umsatz ein richtig rund gemachtes Ergebnis und Unterlauf geben einen denormalised kleinen Wert zurück und können fast immer so ignoriert werden. teilen Sie Rückunendlichkeit genau durch die Null, die normalerweise dann eine begrenzte Zahl teilen und so Null geben wird, oder eine ungültige Ausnahme nachher geben wird wenn nicht, und auch normalerweise so ignoriert werden kann. Zum Beispiel wird durch den wirksamen Widerstand von drei Widerständen in der Parallele (sieh Abb. 1), gegeben. Wenn sich ein Kurzschließen mit dem Satz zu 0 entwickelt, wird +infinity zurückgeben, der ein Finale 0, wie erwartet, geben wird (sieh das fortlaufende Bruchteil-Beispiel für ein anderes Beispiel).

Überschwemmung und ungültige Ausnahmen können normalerweise nicht ignoriert werden, aber vertreten Fehler nicht notwendigerweise: Zum Beispiel kann eine wurzelfindende Routine, als ein Teil seiner normalen Operation, einen passierten - in der Funktion an Werten außerhalb seines Gebiets bewerten, NaN und eine ungültige Ausnahme-Fahne zurückgebend, die bis zur Entdeckung eines nützlichen Anfang-Punkts zu ignorieren ist.

Genauigkeitsprobleme

Die Tatsache, dass Schwimmpunkt-Zahlen alle reellen Zahlen nicht genau vertreten können, und dass Schwimmpunkt-Operationen wahre arithmetische Operationen nicht genau vertreten können, führt zu vielen überraschenden Situationen. Das ist mit der begrenzten Präzision verbunden, mit der Computer allgemein Zahlen vertreten.

Zum Beispiel bedeutet der non-representability 0.1 und 0.01 (in der Dualzahl), dass das Ergebnis des Versuchs zu quadratischen 0.1 weder 0.01 noch die wiederpräsentable daran am nächste Zahl ist. In 24 Bit (einfache Präzision) wurde Darstellung, 0.1 (Dezimalzahl) vorher als e = 4 gegeben; s = 110011001100110011001101, der ist

:0.100000001490116119384765625 genau.

Das Quadrieren dieser Zahl gibt

:0.010000000298023226097399174250313080847263336181640625 genau.

Quadrieren gibt es mit der Schwimmpunkt-Hardware der einfachen Präzision (mit dem Runden)

:0.010000000707805156707763671875 genau.

Aber die wiederpräsentable Zahl, die an 0.01 am nächsten ist, ist

:0.009999999776482582092285156250 genau.

Außerdem bedeutet der non-representability von π (und π/2), dass eine versuchte Berechnung der Lohe (π/2) kein Ergebnis der Unendlichkeit nachgeben wird, noch es sogar überfließen wird. Es ist einfach für die Standardschwimmpunkt-Hardware nicht möglich zu versuchen, Lohe (π/2) zu schätzen, weil π/2 genau nicht vertreten werden kann. Diese Berechnung in C:

/* Genug Ziffern, um sicher zu sein, bekommen wir die richtige Annäherung. * /

doppeltes Pi = 3.1415926535897932384626433832795;

verdoppeln Sie z = Lohe (Pi/2.0);

</Quelle>

wird ein Ergebnis 16331239353195370.0 geben. In der einfachen Präzision (die Tanf-Funktion verwendend), wird das Ergebnis 22877332.0 sein.

Aus dem gleichen Grunde wird eine versuchte Berechnung der Sünde (π) Null nicht nachgeben. Das Ergebnis wird (etwa) 0.1225 in der doppelten Präzision, oder 0.8742 in der einfachen Präzision sein.

Während Schwimmpunkt-Hinzufügung und Multiplikation sowohl auswechselbar sind (+ b = b + a als auch a×b = b×a), sind sie nicht notwendigerweise assoziativ. D. h. (+ b) + ist c + (b + c) nicht notwendigerweise gleich. Das Verwenden 7-stelliger dezimaler Arithmetik:

a = 1234.567, b = 45.67834, c = 0.0004

(+ b) + c:

1234.567 (ein)

+ 45.67834 (b)

____________

1280.24534 Runden zu 1280.245

1280.245 (+ b)

+ 0.0004 (c)

____________

1280.2454 Runden zu 1280.245, Wenn wir zwei fast gleiche Anzahlen abziehen, setzen wir die meisten positiven Ziffern auf die Null, uns mit gerade den unbedeutenden und am meisten falschen, Ziffern verlassend. Zum Beispiel, wenn man eine Ableitung einer Funktion bestimmt, wird die folgende Formel verwendet:

:

:Intuitively, den man einen h sehr in der Nähe von der Null jedoch wollen würde wenn man verwendet, Punkt-Operationen, die kleinste Zahl schwimmen lassend, wird die beste Annäherung einer Ableitung nicht geben. Da h kleiner wächst, wächst der Unterschied zwischen f (+ h) und f (a) kleiner, die bedeutendsten und am wenigsten falschen Ziffern annullierend und die am meisten falschen Ziffern wichtiger machend. Infolgedessen wird die kleinste Zahl von möglichem h eine mehr falsche Annäherung einer Ableitung geben als eine etwas größere Zahl. Das ist vielleicht das allgemeinste und ernste Genauigkeitsproblem.

  • Konvertierungen zur ganzen Zahl sind nicht intuitiv: Das Umwandeln (63.0/9.0) zur ganzen Zahl trägt 7, aber das Umwandeln (0.63/0.09) kann 6 tragen. Das ist, weil Konvertierungen allgemein aber nicht herum stutzen. Fußboden und Decke-Funktionen können Antworten erzeugen, die durch einen vom intuitiv erwarteten Wert aus sind.
  • Beschränkte Hochzahl-Reihe: Ergebnisse könnten tragende Unendlichkeit oder Unterlauf überfluten, der eine unterdurchschnittliche Zahl oder Null nachgibt. In diesen Fällen wird Präzision verloren.
  • Die Prüfung für die sichere Abteilung ist problematisch: Überprüfung, dass der Teiler nicht Null ist, versichert nicht, dass eine Abteilung nicht überfließen wird.
  • Die Prüfung für die Gleichheit ist problematisch. Zwei rechenbetonte Folgen, die mathematisch gleich sind, können verschiedene Schwimmpunkt-Werte gut erzeugen.

Maschinenpräzision und rückwärts gerichtete Fehleranalyse

Maschinenpräzision ist eine Menge, die die Genauigkeit eines Schwimmpunkt-Systems charakterisiert, und in der rückwärts gerichteten Fehleranalyse von Schwimmpunkt-Algorithmen verwendet wird. Es ist auch bekannt als Einheit roundoff oder Maschinenepsilon. Gewöhnlich angezeigter Ε, sein Wert hängt vom besonderen Runden ab, das wird verwendet.

Mit dem Runden zur Null,

:

wohingegen das Runden zum nächsten,

:

Das ist wichtig, da es den Verhältnisfehler im Darstellen jeder reellen Nichtnullzahl x innerhalb der normalisierten Reihe eines Schwimmpunkt-Systems begrenzt:

:

Rückwärts gerichtete Fehleranalyse, die von James H. Wilkinson verbreitet ist, kann verwendet werden, um festzustellen, dass ein Algorithmus, der eine numerische Funktion durchführt, numerisch stabil ist. Die grundlegende Annäherung soll zeigen, dass, obwohl das berechnete Ergebnis, wegen roundoff Fehler, nicht genau richtig sein wird, es die genaue Lösung eines nahe gelegenen Problems mit ein bisschen gestörten Eingangsdaten ist. Wenn die erforderliche Unruhe auf der Ordnung der Unklarheit in den Eingangsdaten klein ist, dann sind die Ergebnisse in einem so genauen Sinn, wie die Daten "verdienen". Der Algorithmus wird dann als rückwärts gerichteter Stall definiert.

Als ein triviales Beispiel, denken Sie einen einfachen Ausdruck, der das Skalarprodukt (Länge zwei) Vektoren und, dann gibt

: wo richtig rund gemachte Schwimmpunkt-Arithmetik anzeigt

::: wo, vom obengenannten

::::::

und so

: wo

:;;

:;

:where, definitionsgemäß

der die Summe zwei ein bisschen gestört (auf der Ordnung von Ε) Eingangsdaten ist, und rückwärts stabil ist auch. Realistischere Beispiele verlangen das Schätzen der Bedingungszahl der Funktion (sieh Higham 2002 und andere Verweisungen unten).

Die Minderung der Wirkung von Genauigkeitsproblemen

Obwohl, wie bemerkt, vorher, individuelle arithmetische Operationen von IEEE 754 genau zu innerhalb eines halben ULP versichert werden, können mehr komplizierte Formeln unter größeren Fehlern wegen der Runde - davon leiden. Der Verlust der Genauigkeit kann wesentlich sein, wenn ein Problem oder seine Daten schlecht-bedingt werden, bedeutend, dass das richtige Ergebnis zu winzigen Unruhen in seinen Daten überempfindlich ist. Jedoch können sogar Funktionen, die gut bedingt sind, unter dem großen Verlust der Genauigkeit leiden, wenn ein Algorithmus, der numerisch dafür Daten nicht stabil ist, verwendet wird: Anscheinend gleichwertige Formulierungen von Ausdrücken auf einer Programmiersprache können sich deutlich in ihrer numerischen Stabilität unterscheiden. Eine Annäherung, um die Gefahr solchen Verlustes der Genauigkeit zu entfernen, ist das Design und die Analyse numerisch stabiler Algorithmen, die ein Ziel des Zweigs der als numerische Analyse bekannten Mathematik ist. Eine andere Annäherung, die gegen die Gefahr von numerischen Instabilitäten schützen kann, ist die Berechnung des Zwischengliedes (Kratzer) Werte in einem Algorithmus an einer höheren Präzision, als das Endresultat verlangt, der umziehen, oder durch Größenordnungen, solche Gefahr abnehmen kann: IEEE 754 vierfache Präzision und erweiterte Präzision werden für diesen Zweck entworfen, wenn man an der doppelten Präzision rechnet.

Zum Beispiel ist der folgende Algorithmus eine direkte Durchführung, um die Funktion (x) = (x-1) / zu schätzen (exp (x-1) - 1), der an 1.0 gut bedingt ist, jedoch, wie man zeigen kann, ist es numerisch nicht stabil und verliert bis zu Hälfte der durch die Arithmetik getragenen positiven Ziffern, wenn geschätzt, in der Nähe von 1.0.

verdoppeln Sie sich (verdoppeln Sie sich X)

{\

verdoppeln Sie Y, Z;//[1]

Y = X - 1.0;

Z = exp (Y);

wenn (Z! = 1.0) Z = Y / (Z - 1.0);//[2]

kehren Sie (Z) zurück;

}\

</Quelle>

Wenn, jedoch, Zwischenberechnung alles in der verlängerten Präzision durchgeführt wird (z.B durch das Setzen der Linie [1] zu C99, lange verdoppeln sich), dann bis zur vollen Präzision im doppelten Endergebnis kann aufrechterhalten werden. Wechselweise offenbart eine numerische Analyse des Algorithmus das, wenn die folgende nichtoffensichtliche Änderung, um sich [2] aufzustellen, vorgenommen wird:

wenn (Z! = 1.0) Z = Klotz (Z) / (Z - 1.0);

</Quelle>

dann wird der Algorithmus numerisch stabil und kann zur vollen doppelten Präzision rechnen.

Um die Eigenschaften solcher sorgfältig gebauten numerisch stabilen Programme aufrechtzuerhalten, ist das sorgfältige Berühren durch den Bearbeiter erforderlich. Bestimmte "Optimierungen", die Bearbeiter machen könnten (zum Beispiel, Umstellungsoperationen) können gegen die Absichten der wohl erzogenen Software arbeiten. Es gibt eine Meinungsverschiedenheit über die Mängel von Bearbeitern und Sprachdesigns in diesem Gebiet: C99 ist ein Beispiel einer Sprache, wo solche Optimierungen sorgfältig angegeben werden, um numerische Präzision aufrechtzuerhalten. Sieh die externen Verweise an der Unterseite von diesem Artikel.

Eine ausführliche Behandlung der Techniken, um Qualitätsschwimmpunkt-Software zu schreiben, ist außer dem Spielraum dieses Artikels, und auf den Leser wird, und die anderen Verweisungen an der Unterseite von diesem Artikel verwiesen. Kahan schlägt mehrere Faustregeln vor, die durch Größenordnungen die Gefahr von numerischen Anomalien, zusätzlich zu, oder anstatt, einer sorgfältigeren numerischen Analyse wesentlich vermindern können. Diese schließen ein: Wie bemerkt, oben, alle Ausdrücke und Zwischenglied schätzend, läuft auf die höchste Präzision hinaus, die auf die Hardware unterstützt ist (eine allgemeine Faustregel ist, zweimal die Präzision des gewünschten Ergebnisses zu tragen d. h. in der doppelten Präzision für ein Endergebnis der einfachen Präzision, oder in der doppelten verlängerten oder Viererkabelpräzision für bis zu doppelten Präzisionsergebnissen zu rechnen); und Eingangsdaten und Ergebnisse zu nur der Präzision rund machend, die erforderlich und durch die Eingangsdaten unterstützt ist (Überpräzision im Endresultat tragend, das darüber hinaus erforderlich und durch die Eingangsdaten unterstützt ist, kann irreführend sein, können Zunahme-Lagerungskosten und Abnahme-Geschwindigkeit und die Überbit Konvergenz von numerischen Verfahren betreffen: Namentlich läuft die erste Form des wiederholenden Beispiels, das unten angeführt ist, richtig zusammen, wenn sie diese Faustregel verwendet). Kurze Beschreibungen von mehreren zusätzlichen Problemen und Techniken folgen.

Da Dezimalbrüche häufig im binären Schwimmpunkt nicht genau vertreten werden können, ist solche Arithmetik an seinem besten, wenn es einfach verwendet wird, um wirkliche Mengen über eine breite Reihe von Skalen (wie die Augenhöhlenperiode eines Monds um den Saturn oder die Masse eines Protons), und an seinem schlechtesten zu messen, wenn, wie man erwartet, es die Wechselwirkungen von ausgedrückten Mengen modelliert, weil Dezimalzahl spannt, die, wie man erwartet, genau sind. Ein Beispiel des letzten Falls ist Finanzberechnungen. Deshalb neigt Finanzsoftware dazu, eine binäre Schwimmpunkt-Zahl-Darstellung nicht zu verwenden. Der "dezimale" Datentyp C# und Pythonschlange-Programmiersprachen und der IEEE 754-2008 dezimaler Schwimmpunkt-Standard, wird entworfen, um die Probleme von binären Schwimmpunkt-Darstellungen, wenn angewandt, auf von den Menschen eingegangene genaue dezimale Werte zu vermeiden, und sich die Arithmetik immer, wie erwartet, benehmen zu lassen, wenn Zahlen in der Dezimalzahl gedruckt werden.

Erwartungen von der Mathematik dürfen im Feld der Schwimmpunkt-Berechnung nicht begriffen werden. Zum Beispiel ist es bekannt, dass, und dass jedoch diese Tatsachen darauf nicht verlassen werden können, wenn die beteiligten Mengen das Ergebnis der Schwimmpunkt-Berechnung sind.

Der Gebrauch des Gleichheitstests verlangt Sorge wenn, sich mit Schwimmpunkt-Zahlen befassend. Sogar einfache Ausdrücke mögen auf den meisten Computern, wird scheitern, wahr zu sein (in IEEE 754 doppelte Präzision ist zum Beispiel-4.44089209850063e-16 ungefähr gleich). Folglich werden solche Tests manchmal durch "krause" Vergleiche ersetzt (

Kleine Fehler in der Fließkommaarithmetik können wachsen, wenn mathematische Algorithmen Operationen eine riesige Menge von Zeiten durchführen. Einige Beispiele sind Matrixinversion, Eigenvektor-Berechnung und das Differenzialgleichungslösen. Diese Algorithmen müssen mit numerischen Annäherungen wie Wiederholende Verbesserung sehr sorgfältig entworfen werden, wenn sie gut arbeiten sollen.

Die Summierung eines Vektoren von Schwimmpunkt-Werten ist ein grundlegender Algorithmus in der wissenschaftlichen Computerwissenschaft, und so ist ein Bewusstsein dessen, wenn der Verlust der Bedeutung vorkommen kann, notwendig. Zum Beispiel, wenn man eine sehr hohe Zahl von Zahlen hinzufügt, sind die individuellen Summanden im Vergleich zur Summe sehr klein. Das kann zu Verlust der Bedeutung führen. Eine typische Hinzufügung würde dann etwas wie sein

3253.671

+ 3.141276

--------

3256.812

Die niedrigen 3 Ziffern der Summanden werden effektiv verloren. Nehmen Sie zum Beispiel an, dass man viele Zahlen, alle hinzufügen muss, die ungefähr 3 gleich sind. Nachdem 1000 von ihnen hinzugefügt worden sind, ist die laufende Summe ungefähr 3000; die verlorenen Ziffern werden nicht wiedergewonnen. Der Kahan Summierungsalgorithmus kann verwendet werden, um die Fehler zu reduzieren.

Herum - vom Fehler kann die Konvergenz und Genauigkeit von wiederholenden numerischen Verfahren betreffen. Als ein Beispiel ist Archimedes π näher gekommen, indem er die Umfänge von Vieleck-Einschreiben und Umgrenzen eines Kreises, Starten mit Sechsecken und nacheinander Verdoppelung der Zahl von Seiten berechnet hat. Wie bemerkt, oben kann Berechnung in einem Weg umgeordnet werden, der mathematisch gleichwertig, aber für den Fehler (numerische Analyse) weniger anfällig ist.

Zwei Formen der Wiederauftreten-Formel für das umschriebene Vieleck sind:

:::

Hier ist eine Berechnung mit IEEE "doppelt" (ein significand mit 53 Bit der Präzision) Arithmetik:

ich 6 × 2 × t, bilden Sie zuerst 6 × 2 × t, die zweite Form

0.4641016151377543863. 4641016151377543863

1.2153903091734710173. 2153903091734723496

2 596599420974940120 596599420975006733

3 60862151314012979 60862151314352708

4 27145996453136334 27145996453689225

5 8730499801259536 8730499798241950

6 6627470548084133 6627470568494473

7 6101765997805905 6101766046906629

8 70343230776862 70343215275928

9 37488171150615 37487713536668

10 9278733740748 9273850979885

11 7256228504127 7220386148377

12 717412858693 707019992125

13 189011456060 78678454728

14 717412858693 46593073709

15 19358822321783 8571730119

16 717412858693 6566394222

17 810075796233302 6065061913

18 717412858693 939728836

19 4061547378810956 908393901

20 05434924008406305 900560168

21 00068646912273617 8608396

22 349453756585929919 8122118

23 00068646912273617 95552

24. 2245152435345525443 68907

25 62246

26 62246

27 62246

28 62246

Der wahre Wert ist

Während die zwei Formen der Wiederauftreten-Formel klar mathematisch gleichwertig sind, macht das erste 1 von einer Zahl äußerst in der Nähe von 1 Abstriche, zu einem immer problematischeren Verlust von positiven Ziffern führend. Da das Wiederauftreten wiederholt angewandt wird, verbessert sich die Genauigkeit zuerst, aber dann verschlechtert es sich. Es wird nie besser als ungefähr 8 Ziffern, wenn auch 53-Bit-Arithmetik zu ungefähr 16 Ziffern der Präzision fähig sein sollte. Wenn die zweite Form des Wiederauftretens verwendet wird, läuft der Wert zu 15 Ziffern der Präzision zusammen.

Siehe auch

  • C99 für Codebeispiele, die Zugang und Gebrauch von IEEE 754 Eigenschaften demonstrieren.
  • Berechenbare Zahl
  • Coprozessor
  • Dezimaler Schwimmpunkt
  • Doppelte Präzision
  • Experimentelle Mathematik - verwertet hohe Präzision, die Punkt-Berechnung schwimmen lässt
  • Festkommaarithmetik
  • MISSERFOLGE
  • Die genauen Tische des Mädchens
  • GNU-Mehrpräzisionsbibliothek
  • Hälfte der Präzision
  • IEEE 754 — Standard für die Binäre Fließkommaarithmetik
  • IBM Floating Point Architecture
  • Microsoft Binary Format
  • Hin- und Miniherbewegung
  • Q (Zahl-Format) für die unveränderliche Entschlossenheit
  • Viererkabelpräzision
  • Positive Ziffern
  • Einfache Präzision

Zeichen und Verweisungen

Weiterführende Literatur

  • Was Jeder Computerwissenschaftler Über die Fließkommaarithmetik durch David Goldberg Wissen Sollte, der im Problem im März 1991 veröffentlicht ist, Überblicke Zu schätzen.
  • Nicholas Higham. Genauigkeit und Stabilität von Numerischen Algorithmen, der Zweiten Ausgabe. SIAM, 2002. Internationale Standardbuchnummer 0-89871-355-2.
  • Gene F. Golub und Charles F. van Loan. Matrixberechnung, die Dritte Ausgabe. Universität von Johns Hopkins Presse, 1986. Internationale Standardbuchnummer 0-8018-5413.
  • Donald Knuth. Die Kunst der Computerprogrammierung, Bands 2: Halbnumerische Algorithmen, die Dritte Ausgabe. Addison-Wesley, 1997. Internationale Standardbuchnummer 0-201-89684-2. Abschnitt 4.2: Punkt-Arithmetik, Seiten 214-264 schwimmen lassend.
  • Drücken u. a. Numerische Rezepte in C ++. Die Kunst der Wissenschaftlichen Computerwissenschaft, internationale Standardbuchnummer 0-521-75033-4.
  • James H. Wilkinson. Rundungsfehler in algebraischen Prozessen. 1963. - Klassische einflussreiche Abhandlungen auf der Schwimmpunkt-Arithmetik.
  • James H. Wilkinson. Das Algebraische Eigenvalue Problem, Clarendon Press, 1965.
  • P.H. Sterbenz. Das Schwimmen der Punkt-Berechnung. 1974. - Ein anderes klassisches Buch auf dem Schwimmpunkt und der Fehleranalyse.

Links

  • Kahan, William und Darcy, Joseph (2001). Wie Javas Schwimmpunkt jeden überall verletzt. Wiederbekommen am 5. September 2003.
  • Der Überblick über Schwimmpunkt-Formate, die Diese Seite einer sehr kurzen Zusammenfassung von Schwimmpunkt-Formaten gibt, die im Laufe der Jahre verwendet worden sind.
  • Die Fallen, Schwimmpunkt-Berechnung durch David Monniaux nachzuprüfen, haben auch in ACM Transaktionen Auf Programmiersprachen Und Systemen (TOPLAS), Mai 2008 gedruckt: ein Kompendium von nichtintuitiven Handlungsweisen des Schwimmpunkts auf populären Architekturen, mit Implikationen für die Programm-Überprüfung und prüfend
  • http://www.opencores.org enthält Die Website von OpenCores offene Quelle, die Punkt IP Kerne für die Durchführung von Schwimmpunkt-Maschinenbedienern in FPGA oder ASIC Geräten schwimmen lässt. Das Projekt, double_fpu, enthält verilog Quellcode einer doppelten Präzision, die Punkt-Einheit schwimmen lässt. Das Projekt, fpuvhdl, enthält vhdl Quellcode einer einfachen Präzision, die Punkt-Einheit schwimmen lässt.
  • http://msdn.microsoft.com/en-us/library/aa289157 (v=vs.71).aspx "Microsoft Visual C ++ Schwimmpunkt-Optimierung", durch Eric Fleegal, MSDN, 2004

Fabius Maximus / Die erste Epistel zu den Korinthern
Impressum & Datenschutz