Ich sehe nur sehr wenige Nicht-Gleitkomma-Computer-Bibliotheken / -Pakete. Angesichts der verschiedenen Ungenauigkeiten der Gleitkommadarstellung stellt sich die Frage, warum es nicht zumindest einige Bereiche gibt, in denen diese erhöhte Genauigkeit die Komplexität der Arbeit mit Festkommawerten wert sein könnte.
Gibt es größere Schwierigkeiten bei der Verwendung beispielsweise eines Festpunkt-Eigenwertlösers? Wie langsam / schnell, ungenau / genau wären sie?
floating-point
numerics
Milind R.
quelle
quelle
Antworten:
Die Verwendung von Festkomma-Arithmetik kann unter bestimmten Umständen angebracht sein. Im Allgemeinen ist es für wissenschaftliches Rechnen (zumindest in dem Sinne, wie die meisten Leute es denken) nicht geeignet, da die großen Dynamikbereiche ausgedrückt werden müssen. Sie erwähnen als Beispiel Eigenwertprobleme, aber in der Wissenschaft interessiert man sich sehr oft für die kleinsten Eigenwerte einer Matrix (z. B. für die Berechnung des Grundzustands eines Quantensystems). Die Genauigkeit kleiner Eigenwerte wird im Allgemeinen im Vergleich zu großen Eigenwerten ziemlich verschlechtert, wenn Sie einen festen Punkt verwenden. Wenn Ihre Matrix Einträge enthält, die durch große Verhältnisse variieren, können die kleinen Eigenwerte in der Arbeitsgenauigkeit möglicherweise nicht ausgedrückt werden. Dies ist ein Problem bei der Darstellung von Zahlen; Diese Argumente gelten unabhängig davon, wie Sie die Zwischenberechnungen durchführen. Sie könnten möglicherweise eine Skalierung ausarbeiten, um sie auf die berechneten Ergebnisse anzuwenden, aber jetzt haben Sie gerade den Gleitkomma erfunden. Es ist leicht, Matrizen zu konstruieren, deren Elemente sich gut verhalten, deren Eigenwerte sich jedoch außerordentlich schlecht verhalten (wie zWilkinson-Matrizen oder sogar Matrizen mit vollständig ganzzahligen Einträgen ). Diese Beispiele sind nicht so pathologisch, wie es scheinen mag, und viele Probleme auf dem neuesten Stand der Wissenschaft betreffen Matrizen mit sehr schlechtem Verhalten. Daher ist die Verwendung von Fixpunkten in diesem Zusammenhang eine schlechte Idee (TM).
Sie könnten argumentieren, dass Sie die Größe der Ergebnisse kennen und keine Bits für den Exponenten verschwenden möchten. Lassen Sie uns also über die Zwischenprodukte sprechen. Die Verwendung von Festkomma verschärft im Allgemeinen die Auswirkungen von katastrophalen Stornierungen und Abrundungen, es sei denn, Sie haben wirklich große Mühe, präziser zu arbeiten. Der Leistungsverlust wäre enorm, und ich würde vermuten, dass die Verwendung einer Gleitkommadarstellung mit derselben Mantissenbitbreite schneller und genauer wäre.
Ein Bereich, in dem Fixpunkte leuchten können, sind bestimmte Bereiche des geometrischen Rechnens. Insbesondere wenn Sie eine genaue Arithmetik benötigen oder den Dynamikbereich aller Zahlen im Voraus kennen, können Sie mit dem Festkomma alle Bits in Ihrer Darstellung nutzen. Angenommen, Sie möchten den Schnittpunkt zweier Linien berechnen, und die Endpunkte der beiden Linien werden so normalisiert, dass sie im Einheitsquadrat liegen. In diesem Fall kann der Schnittpunkt mit größerer Genauigkeit dargestellt werden als unter Verwendung einer äquivalenten Gleitkommazahl (wodurch Bits auf dem Exponenten verschwendet werden). Nun ist es mit ziemlicher Sicherheit so, dass die für diese Berechnung erforderlichen Zwischenzahlen mit höherer Genauigkeit berechnet oder zumindest sehr sorgfältig durchgeführt werden müssen (Wenn Sie das Produkt aus zwei Zahlen durch eine andere Zahl teilen, müssen Sie sehr vorsichtig sein . In dieser Hinsicht ist der Festpunkt eher vom Standpunkt der Darstellung als vom Standpunkt der Berechnung aus vorteilhaft, und ich würde sogar sagen, dass dies im Allgemeinen der Fall ist, wenn Sie bestimmte Ober- und Untergrenzen für den Dynamikbereich Ihrer Algorithmusausgaben festlegen können . Das kommt selten vor.
Früher dachte ich, dass Gleitkomma-Darstellungen grob oder ungenau sind (warum Bits auf einem Exponenten verschwenden?!). Aber im Laufe der Zeit wurde mir klar, dass es wirklich eine der bestmöglichen Darstellungen für reelle Zahlen ist. Dinge in der Natur werden auf Protokollskalen angezeigt, sodass reale Daten einen großen Bereich von Exponenten umfassen. Um die höchstmögliche relative Genauigkeit zu erreichen, müssen Sie auch an Protokollskalen arbeiten, um die Verfolgung eines Exponenten natürlicher zu gestalten. Der einzige andere Anwärter auf eine "natürliche" Darstellung ist der symmetrische Pegelindex . Addition und Subtraktion sind in dieser Darstellung jedoch viel langsamer, und es fehlt die Hardware-Unterstützung von IEEE 754. Den Gleitkomma-Standards wurde eine enorme Menge an Gedanken gewidmetdurch eine Säule der numerischen linearen Algebra. Ich würde denken, er weiß, was die "richtige" Darstellung von Zahlen ist.
quelle
Betrachten Sie Folgendes als Beispiel dafür, warum exakte Arithmetik / Festkomma-Arithmetik so selten verwendet wird:
Bei der Finite-Elemente-Methode kommen wir wie bei fast jeder anderen im wissenschaftlichen Rechnen verwendeten Methode zu linearen oder nichtlinearen Systemen, die nur Annäherungen an die reale Welt sind. Beispielsweise ist in der FEM das zu lösende lineare System nur eine Annäherung an die ursprüngliche partielle Differentialgleichung (die selbst nur eine Annäherung an die reale Welt sein kann). Warum also enorme Anstrengungen unternehmen, um etwas zu lösen, das nur eine Annäherung ist?
Die meisten der heute verwendeten Algorithmen sind iterativer Natur: Newtons Methode, Gradienten konjugieren usw. Wir beenden diese Iterationen immer dann, wenn wir uns davon überzeugt haben, dass die Genauigkeit der iterativen Annäherung an die Lösung des Problems ausreichend ist. Mit anderen Worten, wir beenden, bevor wir die genaue Lösung haben. Warum sollten wir nach wie vor exakte Arithmetik für ein iteratives Schema verwenden, wenn wir wissen, dass wir nur Näherungen berechnen?
quelle
float
bald nicht mehr die Rückseite sehen .Wenn Sie sich diese Bibliothek auf korrekte Rundung ansehen : CRlibm , werden Sie in der Dokumentation sehen, dass Algorithmen im Allgemeinen (mit begründeten Beweisen) als genau erwiesen werden müssen. Warum? Die Stabilität und Geschwindigkeit der Konvergenz eines Ergebnisses einer Funktion hat keine "Einheitslösung". Kurz gesagt, es gibt "kein kostenloses Mittagessen" - Sie müssen arbeiten, um zu beweisen, dass Ihre Argumentation richtig ist. Dies liegt am Verhalten der zu modellierenden Funktionen und nicht an der zugrunde liegenden Hardware (unabhängig davon, ob Sie Ganzzahl- oder Gleitkommaeinheiten verwenden, obwohl beide "Fallstricke" wie Überlauf / Unterlauf, Denormalzahlen usw. haben), selbst wenn das Ergebnis Wenn Sie nach Konvergenzen zu einer Ganzzahl suchen, ist der Algorithmus, mit dem das Ergebnis ermittelt wird, nicht unbedingt sehr stabil.
Eigen ist eine C ++ - Bibliothek mit einer Vielzahl von Algorithmen zum Lösen von Matrizen mit jeweils unterschiedlichen Eigenschaften. Diese Seite enthält eine Tabelle, in der die Kompromisse zwischen Geschwindigkeit und Genauigkeit für die verschiedenen Algorithmen zum Lösen einer Matrix erläutert werden. Ich vermute, die Eigenbibliothek kann machen, was Sie wollen. :-)
quelle
Einige schöne Beispiele dafür, wo hochpräzise Arithmetik in der Mathematik nützlich war, finden Sie in dem Buch Mathematics by Experiment von Jonathan Borwein und David Bailey. Es gibt auch diese Fortsetzung , die ich nicht gelesen habe.
quelle