2016-07-04 13 views
0

Aus Spaß, ich versuche, Chudnovsky-Algorithmus zu implementieren, Pi in Java mit einer Gleitkomma-Bibliothek mit beliebiger Genauigkeit zu berechnen. Eine Sache, die mir auffällt, ist, dass ich den Kehrwert einer Zahl 1/n berechnen muss, da die Formel als 1/pi = Summe (...)Präzision von reziprok in Fließkomma-Arithmetik

Wie viele signifikante Ziffern/Ziffern der Genauigkeit würde man berechnen braucht die Gleitkommazahl n, damit 1/n eine gewünschte Genauigkeit hat? Gibt es eine einfache Antwort darauf? Ich habe versucht, einige Berechnungen wie 1/0.100009999999 = 9.99900010009 durchzuführen, um den Kehrwert von 0.1 mit fünf korrekten Nachkommastellen zu bestimmen. Ich sehe, dass, wenn ich die ersten drei Ziffern hinter dem Dezimalpunkt nehme und das Ergebnis runder mache, der korrekte Wert 10 erhalten wird, aber gibt es eine allgemeine Regel dafür, wie viele Ziffern nach der 1/n-Operation korrekt sind? Ich bin auch am gleichen Ergebnis interessiert, aber in binären und hexadezimalen Basen.

Erprobtes Googeln und schnelle Suche auf Stackoverflow, aber keine vorherige Antwort darauf gefunden. Entschuldigung, wenn Duplikat existiert.

+1

Für pi (wie es zwischen 1 und 10 ist) sollte es innerhalb einer Ziffer sein. Um also eine Genauigkeit von tausend Stellen zu erhalten, benötigen Sie eine reziproke Genauigkeit von bis zu 1001 Stellen. Müssen Sie genau wissen? Sie erhalten geschätzte Werte trotzdem gegen Ende der Präzision, also spielt eine Ziffer hier oder da keine Rolle? Ich hoffe, dass Sie nichts davon mit eingebauten Double/Float-Werten in irgendeiner Sprache testen ... –

+0

Vielen Dank für Ihre Eingabe. Was wäre eine allgemeine Antwort für eine Zahl n, die nicht pi ist (da pi nicht zwischen 1 und 10 in Basis 2 ist)? Nein, ich verwende kein eingebautes Double/Float. Ich werde entweder Javas eingebautes BigDecimal oder Apfloat verwenden – user1661303

Antwort

1

Sie möchten 1/x berechnen, berechnen aber 1/(x + d) mit d = delta x den Kürzungsfehler. Durch binomische Theoreme,

1/(x+d) = (x-d)/(x²-d²) 

und da wir, dass d² annehmen können weit unter jedem Gleitkommafehler ist, ist der Fehler der reziproken -d/x² und desto relevante relative Fehler -d/x.

Das bestätigt den Kommentar von Artur Biesiadowski, wenn 1/x zwischen 1 und 10 liegt, dann ist die Fehlervergrößerung im ungünstigsten Fall um den Faktor 10.