2012-03-23 14 views
1

Ich habe eine Frage über Fließkomma-Präzision. Wie ich es verstehe, ist ULP der Abstand zwischen zwei aufeinanderfolgenden diskreten, endlichen Zahlen in einer gegebenen Spezifikation. Oder die Einheit an der am wenigsten signifikanten Stelle, wie der Name sagt. Auf jedem Fall habe ich dies auf der Java-Spezifikation für sinh in java.lang.Math: „Das berechnete Ergebnis innerhalb von 2,5 ULPs des genauen Ergebnisses sein muss“Nicht ganzzahliger ULP-Fehler?

Ich verstehe nicht, wie Sie einen ULP-Fehler haben können, der keine ganze Zahl ist. Wenn Sie 2,5 ULPs haben, bedeutet das nicht, dass es einen Ort gibt, der weniger bedeutsam ist als der am wenigsten signifikante Ort? Was bedeutet es, einen Fehler von 2,5 ULPs zu haben?

Antwort

7

Betrachten Sie die Berechnung 3/2. Das genaue Ergebnis ist 1,5. In der Ganzzahlarithmetik ist das Ergebnis 1. Dies ist ein Fehler von 0,5, d.h. ein halber ULP.

Ähnliche Argumentation kann auf Fließkomma-Arithmetik angewendet werden.

+1

Mit anderen Worten, das Ergebnis _exact_ kann zwischen Gleitkommawerten liegen. –

+0

das ist hilfreich, danke! – follyroof

0

Nein, weil Sie den genauen Wert mit dem berechneten vergleichen.

Wenn Ihr ULP 1 ist und das Ergebnis ist 0,5, wird Ihr Fehler 0,5 ULP sein.

0

Sie können einen Fehler nicht mit fraktionierten ULPs in dem gleichen Nummerierungssystem messen, auf denen die ULP gilt. Aber Sie können zum Beispiel, wenn Sie einen float Wert berechnen, aber double für Zwischenberechnungen verwenden. In diesem Fall wäre der doppelte Wert der (mehr) exakte Wert und der Gleitkommawert wäre der gerundete Wert. Der Unterschied zwischen den beiden wird geringer sein als der ULP für Schwimmer.

Dies ist relevant für Math.sinh(), da es Teil der Kernsprache API ist, und so dient der Javadoc als eine Spezifikation, die alle konforme Implementierungen einhalten müssen. Die Oracle JDK-Implementierung delegiert die Berechnung an eine native Methode. Im Wesentlichen sagt der Javadoc: "Sie können diese Methode beliebig implementieren, solange Sie garantieren können, dass sie immer einen Wert liefert, der gut genug ist."