Berechnung der n-ten Wurzel in Java

Berechnung der n-ten Wurzel in Java

1. Überblick

Der Versuch, die n-te Wurzel in Java mitpow() zu finden, ist in einigen Fällen ungenau. Der Grund dafür ist, dass doppelte Zahlen auf dem Weg an Genauigkeit verlieren können. Daher müssen wir möglicherweise das Ergebnis polieren, um diese Fälle zu behandeln.

2. Das Problem

Angenommen, wir wollen die N-te Wurzel wie folgt berechnen:

base = 125, exponent = 3

Mit anderen Worten, welche Zahl hoch 3 ist 125?

Es ist vorgesehen, dassthe n-th root of a number x is equal with the number x in the power of 1/n. Also übersetzen wir unsere Gleichung in:

N-th root = Math.pow(125, 1/3)

Das Ergebnis ist 4.999999999999999. Und 4.999999999999999 hoch 3 ist nicht 125. Wie beheben wir das?

3. N-te Wurzel richtig berechnen

Die Lösung für das oben genannte Problem ist meistens eine mathematische Problemumgehung und so einfach wie es nur geht. Es ist bekannt, dassthe n-th root of a number x is equal with the number x in the power of 1/n.

Es gibt einige Möglichkeiten, die obige Gleichung zu nutzen. Erstens können wir einBigDecimal verwenden und unsere Version derNewton-Raphson-Methode implementieren. Zweitens können wir das Ergebnis auf die nächste Zahl runden und schließlich eine Fehlerquote definieren, bei der die Ergebnisse akzeptabel sind. Wir werden uns auf die letzten beiden Ansätze konzentrieren.

3.1. Runden

Wir werden jetzt die Rundung verwenden, um unser Problem zu lösen. Lassen Sie uns unser vorheriges Beispiel wiederverwenden und sehen, wie wir das richtige Ergebnis erzielen können:

public void whenBaseIs125AndNIs3_thenNthIs5() {
    double nth = Math.round(Math.pow(125, 1.0 / 3.0));
    assertEquals(5, nth, 0);
}

3.2. Fehlermarge

Dieser Ansatz ist sehr ähnlich, um oben zu sein. Wir müssen nur eine akzeptable Fehlergrenze definieren, angenommen 0.00001:

public void whenBaseIs625AndNIs4_thenNthIs5() {
    double nth = Math.pow(625, 1.0 / 4.0);
    assertEquals(5, nth, 0.00001);
}

Der Test beweist, dass unsere Methoden die n-te Wurzel korrekt berechnen.

4. Fazit

Als Entwickler müssen wir die Datentypen und ihr Verhalten verstehen. Die oben beschriebenen mathematischen Methoden funktionieren sehr gut mit ziemlich guter Genauigkeit. Sie können die auswählen, die besser zu Ihrem Anwendungsfall passt. Der Code für die obige Lösung lautetover on GitHub.