2017-01-15 5 views
16

Existiert eine IEEE Doppel x>0 so dass sqrt(x*x) ≠ x, unter der Bedingung, dass die Berechnung nicht x*x Überlauf oder Unterlauf nicht Inf, 0 oder eine denormal Zahl?IEEE doppelt so dass sqrt (x * x) ≠ x

Dies ist gegeben, dass sqrt die nächste darstellbare Ergebnis zurückgibt, und so auch x*x (beide, wie durch den IEEE-Standard vorgeschrieben, „Quadratwurzeloperation wie in unendlicher Genauigkeit berechnet werden, und abgerundete dann auf eine der beiden nächsten Floating -Punktnummern der angegebenen Genauigkeit, die das unendlich genaue Ergebnis umgeben ").

Unter der Annahme, dass, wenn solche Doppelgänger existieren würden, dann gibt es wahrscheinlich Beispiele in der Nähe von 1, schrieb ich ein Programm, um diese Gegenbeispiele zu finden, und es konnte keine zwischen 1.0 und 1.0000004780981346 finden.

die vorhergehende Frage perfect squares and floating point numbers beantwortet die Frage negativ für Situationen, in denen die Berechnung von x*x tut nicht Abrunden beinhalten. Diese Antwort ist für diese Frage nicht ausreichend, da es für x*x möglich sein kann, eine Rundung in eine Richtung und dann eine sqrt(x*x) Rundung in die gleiche Richtung zu umfassen, so dass eine Antwort erzeugt wird, die nicht exakt x ist.

Antwort

19

Sylvie Boldo hat formally proved, dass eine Gleitkommazahl, die die Bedingungen in Ihrer Frage erfüllt, nicht vorhanden ist.

die Zusammenfassung des Artikels Zitiert:

Gleitkommaoperationen Experten wissen, dass mathematische Formeln versagen oder ungenaue Ergebnisse, wenn in Gleitkomma-Arithmetik realisiert. Dieser Artikel beschreibt ein Beispiel, in dem es überraschenderweise absolut nicht der Fall ist. In der Tat ist die Berechnung der Quadratwurzel des Quadrats einer Gleitkommazahl a genau mit | Eine Konsequenz ist die Tatsache, dass die Gleitkommaberechnung eines/sqrt (a + b) immer im Intervall [-1, 1] ist. Dies beseitigt die Notwendigkeit für einen Test, wenn ein arccos oder ein arcsin auf diesen Wert aufgerufen wird. Für weitere Garantien wurde diese Eigenschaft formell mit dem Coq-Proof-Assistenten und der Flocq -Bibliothek überprüft. Die Schlussfolgerung wird Hinweise geben, was passiert, ohne Annahmen und in anderen Radikalen, wo das Verhalten ist sehr unterschiedlich .

„Radix-2 unter Verwendung von“ wurde in Frage wahrscheinlich implizite (obwohl die IEEE auch standardisierte decimal hat Gleitkommazahl Formate und Operationen), und „ein unbegrenzter Exponentenbereich“ entsprechen Ihren „keinen Überlauf oder Unterlauf " Beschränkung.

Ein Grund, warum die Eigenschaft überhaupt möglich ist, ist, dass x*x "expandiert" (das Intervall [1,2] wird zum Beispiel auf [1,4] abgebildet), so dass, wenn kein Überlauf oder Unterlauf, die Rundung, die für * passieren kann, ist gutartig und x ist immer noch die nächstgelegene darstellbare Gleitkommazahl zur echten Quadratwurzel des Gleitkomma-Produkts x*x.Dieses Hand-well Argument ist kein Beweis, also ist es gut, dass der oben verlinkte Artikel einen enthält.

+2

Ich glaube dieses Ergebnis, finde es aber immer noch extrem überraschend. –

Verwandte Themen