Frage

Ja, sollte ich sagen, 80-Bit . Das ist kein Tippfehler ...

Meine Erfahrung mit Gleitkommavariablen hat immer 4-Byte-Multiples beteiligt, wie Singles (32 Bit), verdoppelt (64 Bit) und lange verdoppelt (die ich habe, um entweder als 96-Bit- oder 128-Bit-refered gesehen ). Deshalb habe ich ein wenig verwirrt war, als ich auf eine 80-Bit erweitert Präzision Datentyp während ich auf einigen Code arbeitete zu lesen und schreiben href="http://en.wikipedia.org/wiki/Audio_Interchange_File_Format" rel="noreferrer"> AIFF (Audio Interchange File Format) Dateien

Wenn ich durch Wikipedia abgeschöpft, fand ich den Link zusammen mit einer kurzen Erwähnung von 80-Bit-Formaten in dem IEEE 754-1985 Standard Zusammenfassung (aber nicht in der IEEE 754-2008 Standard Zusammenfassung). Es scheint, dass auf bestimmten Architekturen „erweitert“ und „long double“ synonym.

Eine Sache, die ich nicht über gekommen sind sind spezielle Anwendungen, die Verwendung erweiterter Präzision Datentypen (außer, natürlich, AIFF-Datei Abtastraten) machen. Dies führte mich zu fragen:

  • hat über eine Situation jemand kommen, wo verlängert Präzision notwendig / vorteilhaft für einige Programmieranwendung war?
  • Was sind die Vorteile eines 80-Bit-Fließkommazahl, andere als die offensichtliche „es ist ein wenig mehr Präzision als ein Doppelzimmer, aber weniger Bytes als die meisten Implementierungen eines langen Doppel“?
  • Ist ihre Anwendbarkeit schwindet?
War es hilfreich?

Lösung

Intel FPU verwenden, um das 80-Bit-Format intern zu mehr Präzision für Zwischenergebnisse zu erhalten.

Das heißt, Sie 32-Bit- oder 64-Bit-Variablen haben, aber wenn sie in die FPU Register geladen werden, werden sie auf 80 Bit umgewandelt; die FPU dann (Standardeinstellung) führt alle Berechnungen in 80, aber; Nach der Berechnung wird das Ergebnis in eine 32-Bit- oder 64-Bit-Variablen gespeichert zurück.

BTW - Eine etwas unglückliche Folge davon ist, dass Debug-und Release leicht unterschiedliche Ergebnisse erzeugen können bauen: in dem Release-Build kann der Optimierer eine Zwischengröße in einem 80-Bit-FPU-Register, während im Debug-Build halten, es wird in einer 64-Bit-variablen gespeichert wird, Genauigkeitsverlust zu verursachen. Sie können dies vermeiden, indem 80-Bit-Variablen oder einen FPU-Schalter (oder Compiler-Option), um alle Berechnungen in 64-Bit auszuführen.

Andere Tipps

Für mich ist die Verwendung von 80 Bit ist wesentlich. So kann ich hohe Ordnung (30.000) Eigenwerte und Eigenvektoren von symmetrischen Matrizen mit vier weiteren Figuren erhalten, wenn die GOTO-Bibliothek für Vektor innerer Produkte verwendet wird, dh., 13 statt 9 signifikante Zahlen für die Art von Matrizen, die ich in der relativistischen atomaren verwenden Berechnungen, die fallen in das Meer der negativen Energiezustände zu vermeiden, notwendig ist. Meine andere Option ist mit Quadruple-Precision-Arithmetik, die CPU-Zeit von 60 bis 70 mal erhöht und erhöht auch die RAM-Anforderungen. Jede Berechnung auf innere Produkte von großen Vektoren unter Berufung profitieren. Natürlich, um Teil-Skalarprodukt Ergebnisse innerhalb von Registern zu halten, ist es notwendig, Assemblersprache, wie sie in den GOTO-Bibliotheken zu verwenden. Dies ist, wie kam ich meine alten Opteron 850 Prozessoren zu lieben, die ich so lange verwenden werden, wie sie für diesen Teil meiner Berechnungen dauern.

Der Grund 80 Bit ist schnell, während größere Präzision so viel langsamer ist, ist, dass die Floating-Point-CPU-Standard-Hardware 80-Bit-Register hat. Deshalb, wenn Sie die zusätzlichen 16 Bits (11 zusätzlichen Bits der Mantisse, vier zusätzliche Bits von Exponent und ein zusätzliches Bit effektiv nicht verwendet) wollen, dann ist es nicht wirklich kostet Sie viel 64-80 Bits zu erweitern - während zu verlängern über 80 Bits ist in Bezug auf die Laufzeit extrem teuer. Also, dann kann man auch 80-Bit-Präzision verwenden, wenn Sie es wollen. Es ist nicht zu verwenden, kostenfrei, aber es kommt ziemlich billig.

Wikipedia erklärt , dass ein 80-Bit-Format eines gesamtes 64-Bit-Integer darstellen kann, ohne zu verlieren Information. So ist die Fließkommaeinheit der CPU verwendet werden kann für ganze Zahlen Multiplikation und Division zu implementieren.

Ein weiterer Vorteil noch nicht für 80-Bit-Typen erwähnt ist, dass auf 16-Bit- oder 32-Bit-Prozessoren, die Floating-Point-Einheiten nicht, sondern eine „multiplizieren“ Anweisung haben, das doppelt so lang wie das ein Ergebnis erzeugt Operanden (16x16-> 32 oder 32x32-> 64), arithmetisch auf einem 64-Bit-Mantisse in vier oder zwei Register 16-Bit oder 32-Bit unterteilt werden schneller sein als Arithmetik auf einer Mantisse 53 Bit, die die gleiche Anzahl von Spannen Register, sondern hat 12 Register-Bits mit dem Vorzeichen und Exponenten zu teilen. Für Anwendungen, die Berechnungen auf einem 48-Bit „erweitert float“ Typ nichts präziser als float müssen ebenfalls schneller als Berechnungen auf einem 32-Bit-float sein könnten.

Während einige Leute das Doppelrundungsverhalten von erweiterter Genauigkeit Typen bemängeln könnten, dass spricht realistischerweise nur ein Problem in spezialisierten Anwendungen, die volle Bit-genaue Cross-Plattform-Reproduzierbarkeit. Von einer Genauigkeit Standpunkt, der Unterschied zwischen einem Rundungsfehler von 64/128 vs 65/128 oder 1024 / 2048ulp vs 1025/2048, ist kein Thema; in Sprachen mit erweiterter Genauigkeit Variablentypen und im Einklang mit erweiterter Genauigkeit Semantik , die Verwendung von erweiterten Typen auf vielen Plattformen ohne Floating-Point-Hardware (zB eingebettete Systeme) bieten sowohl ein höheren Genauigkeit und eine höhere Geschwindigkeit als Single- oder double-Precision Floating-Point-Typen.

Ich verwendete 80-Bit für einige reine mathematische Forschung. Ich hatte Begriffe in einer unendlichen Reihe zu summieren, die recht groß, von Doppel außerhalb des Bereichs wuchsen. Konvergenz und Genauigkeit war nicht betrifft, nur die Fähigkeit, große Exponenten wie 1E1000 zu handhaben. Vielleicht haben einige kluge Algebra Dinge vereinfacht sein können, aber es war viel schneller und einfacher, nur einen Algorithmus mit erweiterter Genauigkeit zu codieren, als zu jeder Zeit darüber nachzudenken zu verbringen.

Ich habe einen Freund, der in dem funktioniert. Er arbeitet an einer Bibliothek Gleitpunkte der Größe von Gigabyte zu behandeln. Natürlich ist etwas mit wissenschaftlichem Rechnen (Berechnungen mit Plasma), und kann wahrscheinlich nur diese Art von Computing arbeitet mit Zahlen dieses große ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top