Wie kann man BigDecimal in Java eine Bruchteilleistung zuführen?
In meinem kleinen Projekt, ich brauche etwas zu tun, wie Mathematik.pow(7777.66, 5555.44) nur mit SEHR großen zahlen. Stieß ich auf ein paar Lösungen:
- Verwenden Sie doppelte - aber die zahlen sind zu groß
- BigDecimal Verwenden.pow, aber keine Unterstützung für gebrochene
- Verwenden Sie die X - ^(A+B)=X^A*X^B der Formel (B ist der Rest, der die zweite num), aber wieder keine Unterstützung für den big X oder groß Ein, weil ich noch konvertieren zu double
- Eine Taylor-Reihe-Algorithmus oder etwas ähnliches - ich bin nicht sehr gut in Mathe so dieses ist meine Letzte option, wenn ich keine Lösungen (einige Bibliotheken oder eine Formel für (A+B)^(C+D)).
Kennt jemand eine Bibliothek oder eine einfache Lösung? Ich dachte mir, dass viele Menschen beschäftigen sich mit dem gleichen problem...
p.s.
Ich fand einige Bibliotheken genannt ApFloat, der behauptet, es zu tun, etwa, aber die Ergebnisse, die ich bekam waren so approximieren, dass der sogar 8^2 hat mir 60...
InformationsquelleAutor der Frage Eugene Marin | 2010-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösung für die Argumente unter 1.7976931348623157E308 (Verdoppeln.MAX_VALUE) aber die Unterstützung für die Ergebnisse, die mit MILLIONEN von Ziffern:
Da die doppelten Nummern unterstützt bis zu MAX_VALUE (zum Beispiel 100! im Doppel sieht wie folgt aus: 9.332621544394415E157), ist es kein problem, BigDecimal verwenden.doubleValue(). Aber Sie sollten nicht nur tun Mathe.pow(double, double), denn wenn das Ergebnis größer ist als MAX_VALUE wird Ihnen nur die Unendlichkeit. ALSO: verwenden Sie die Formel X^(A+B)=X^A*X^B zu trennen, die Berechnung auf ZWEI Mächte, die große, mit BigDecimal.pow, und die kleine (Rest des 2. argument), mithilfe Math.pow, dann multiplizieren. X wird kopiert DOUBLE - stellen Sie sicher, es ist nicht größer als MAX_VALUE, wird INT (maximal 2147483647 aber die BigDecimal.pow unterstützt keine ganzen zahlen mehr als eine Milliarde sowieso), und B doppelt, immer weniger als 1 ist. Auf diese Weise können Sie Folgendes tun (ignorieren Sie meine private Konstanten etc):
Ergebnisse Beispiele:
InformationsquelleAutor der Antwort Eugene Marin
Exponenten = Logarithmen.
Werfen Sie einen Blick auf Logarithmus einer BigDecimal
InformationsquelleAutor der Antwort Matthew Flynn