Wie zu verwenden im Java big double zahlen?
Ich eine Lösung gefunden habe für die Berechnung der Zahl Pi durch die Verwendung von BBS-Algorithmus. Aber ich ein problem. Mir fehlt ein Präzision bei Verwendung einer double-Variablen. Gibt es irgendeinen Vorschlag, es zu beheben?
Hier ist mein code:
public class Pi {
public static void main(String[] args) {
int n = 5;
for (int k = 0; k < n; k++) {
int a0 = (int) Math.pow(16, k);
double a1 = (double) 4 / (8 * k + 1);
double a2 = (double) 2 / (8 * k + 4);
double a3 = (double) 1 / (8 * k + 5);
double a4 = (double) 1 / (8 * k + 6);
double a5 = a1 - a2 - a3 - a4;
double a6 = (double) 1 / a0;
double elem = a5 * a6;
System.out.println(new BigDecimal(elem));
}
}
}
Sie haben tagged Ihre Frage 'bigdecimal'. Haben Sie es ausprobiert?
InformationsquelleAutor Alex | 2013-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die Präzision von
BigDecimal
ist, müssen Sie verwenden Sie für alle Berechnungen. Es ist nicht ausreichend, um zu konvertieren das Ergebnis vondouble
zuBigDecimal
am Ende, weil die Präzision ist bis dahin verschwunden.Müssen Sie konvertieren Sie alle Ihre
aX
VariablenBigDecimal
, und ersetzen Sie die Betreiber mit Aufrufe an die entsprechenden Methoden derBigDecimal
Klasse:Demo auf ideone.
Danke. Es funktioniert einwandfrei.
InformationsquelleAutor dasblinkenlight
Das problem ist, dass Sie verdoppelt, während die Berechnung selbst, also zwangsläufig verlieren Genauigkeit. Ja, bist du mit
BigDecimal
am Ende, aber erst, nachdem bereits Daten zu vernichten, indem man Sie verdoppelt.Die Lösung ist nicht zu verwenden, verdoppelt sich bei JEDEM Punkt in der Berechnung. Verwenden
BigDecimal
für jeden Schritt des Weges.Um eine Metapher zu verwenden: Was Sie tun, ist versuchen, Gießen Sie ein Schwimmbad ist Menge von Wasser in ein Glas, dann Gießen Sie das Glas in den pool und erwarten, dass Sie gefüllt werden. Nein, es wird nicht sein, weil die meisten das Wasser passte nicht in das Glas und kippte auf den Boden.
InformationsquelleAutor Smallhacker