Potenzieren mit rationalen Potenzen ohne Math.pow

Scha7tenblut

Mitglied
Hi, für ein Berufsschulprojekt möchte ich eine Potenzfunktion schreiben, die 2 Parameter braucht, um das Ergebnis zu berechnen. Dabei soll sie nicht Math.pow verwenden und muss bei ihren Parametern double-Zahlen akzeptieren, also zum Beispiel 1,5 hoch -1,7. Könnt ihr mir da weiterhelfen, weil egal, wie ich versuche, es mir darzustellen, ich komme jedesmal dabei raus, dass Math.pow notwendig ist.
12955
So sieht die Funktion derzeit aus und ich möchte halt double ergebnis ohne Math.pow errechnen können.
Ich danke im Voraus für gute Vorschläge
Scha7tenblut
 

abc66

Top Contributor
Du könntest das umlagern:
Java:
	static double pow(double x, double y) {
	    return Math.exp(Math.log(x)*y);
	}

jetzt müsstest Du nur noch log und exp umsetzen.
 

Blender3D

Top Contributor
So sieht die Funktion derzeit aus und ich möchte halt double ergebnis ohne Math.pow errechnen können
x^y b,x Element aus den reellen Zahlen
e Die Eulersche Zahl
Es gilt:
x = e^ln(x) -> x^y = (e^ln(x))^y = e^(y*ln(x))

Also benötigst Du noch den Logarithmus.
Beachten Sie, dass man mit den Logarithmen zwischen 1 -10
Logarithmen von beliebigen Zahlen berechnen kann, z.B.
lg 123456.78 = lg (1.2345678 * 105) = 5 + lg 1.2345678 oder lg 0.00012345678 = lg (1.2345678 * 10-4) = -4 + lg 1.2345678
Zur Berechnung der Logarithmen zwischen 1 -10 verwendet man z.B. eine Taylorreihe.
https://www.mathematik.ch/anwendungenmath/logarithmen/
 

abc66

Top Contributor
das hab ich doch weiter oben:
return Math.exp(Math.log(x)*y);
Math.exp(a); ist Folgendes:
Returns Euler's number e raised to the power of a double value. [...]
also braucht er einmal den Logarithmus berechnen und einmal Math.exp...

Das aber auch NUR, wenn es sich um reelle/irrationale/double Zahlen handelt. Wenn der Exponent eine Ganzzahl ist, wäre es ja viel einfacher...
 

abc66

Top Contributor
Ok ich müsste jetzt die Web browsing history von Vor zwei Tagen hervorkramen und mir 1000 Einträge angucken - dazu hab ich keine Lust. :p Wie gesagt es stand irgendwo, aber ich hab es nicht gebookmarked... Wenn ich es gebookmarked hätte, wäre es vielleicht noch schlimmer. o_O
 

Scha7tenblut

Mitglied
Im Grund muss man "nur" (*) herausfinden was die in Java.Math vorgegebene pow-Funktion intern tut: https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html Und man kann durchaus 0^0 rechnen (Ergebnis 1): 0^0 im Google Rechner

(*)leicht gesagt
Math.pow verweist auf VMMAth.pow und dort ist es als native methode ohne weitere information definiert. Und zu dem null hoch null: Du kannst daran aus drei Richtungen rangehen: x hoch 0=1, 0 hoch x = 0 oder direkt undefiniert deklarieren, weil es sonst heißen würde, dass 0=1 und das ist ja, wie wir wissen, totaler Unsinn
 

Scha7tenblut

Mitglied
Also erneutes Edit: Es sollen nicht nur rationale Zahlen, sondern auch reelle Zahlen als Exponenten funktionieren. Die Basis ist in der Hinsicht erstmal egal, da sie ja dann einfach multipliziert wird/mit ihr "nur" gerechnet wird.
 

Ähnliche Java Themen

Neue Themen


Oben