Erste Schritte Potenzmethode per double

ocsme

Top Contributor
Hallo,

ich möchte gerne eine Potenzmethode schreiben die auch Funktioniert wenn man zwei double werte eingibt. Das Problem liegt eigentlich nur an k dem Exponenten denn ist dieser ja ein Bruch so habe ich ja eine Wurzel.

Ich habe so angefangen das klappt aber nur wenn k = int ist!

Java:
public static double pow(double x, double k) {
        double sum=1.0;
        while(k>0) {
            sum*=x;
            k--;
        }
        return sum;
    }

Ich müsste ja im ersten schritt mir erst mal k anschauen und es kleiner machen als 1 danach dann die gesagte Wurzel ziehen mit diesem Exponenten!
Doch ich weiß nicht so recht wie ich das machen soll.
Die Quadratwurzel und Kubikwurzel folgen noch der Code ist fast fertig. Muss ich dann für jeden Fall die passende Wurzel berechnen?

Hat jemand so etwas schon mal gemacht? Ich mach es nur aus Spaß also falls nichts gescheides dabei raus kommt wäre es nicht so schlimm doch Interessieren tut mich eben schon :)

LG
 

MoxxiManagarm

Top Contributor
Deinen bestehenden Code so umschreiben:
Java:
public static double pow(double x, double k) {
  double result = 1.0; // bitte verwende Sum nicht für etwas was keine Summe ist
  for(int exp = 1; exp <= k; exp++) { // for-Schleife anstatt solcher while-Konstruktionen
    result *= x;
  }
  
  // für Wurzel
  double w = k - (int)k;
  // hier Wurzel

  return result;
}
 

mihe7

Top Contributor
Ich würde mal vermuten, dass so etwas intern durch exp(k*ln(x)) berechnet wird. Für die numerische Berechnung der Exponentialfunktion und den Logarithmus gibt es effiziente Algorithmen. Zum Spaß kann man das aber mal über Reihenentwicklungen realisieren.
 

ocsme

Top Contributor
Okay soweit habe ich das alles verstanden und es läuft mein Problem ist jetzt nur noch der Rest.
Denn wir Potenzieren ja bei k=2.33 Basis ^2. Aber was ist mit dem Rest von .33? Ich würde den jetzt erst in einen Bruch versuchen umzuwandeln was aber auch wieder keine Gute Idee ist da es ja auch zahlen gibt wie .33 die Periodisch im Binären sind.
Wie kann ich den mit Log oder exp eine Wurzel umschreiben das verstehe ich grade nicht?

Denn die können ja in einer Pow Methode nicht jede Primzahl-Wurzel Implementiert haben. Denn jede Ungerade Wurzel -1 gibt gerade das kann man ja über das Potenzgesetz ((Basis)^1/2)^1/2 = 4te Wurzel von Basis ... und so weiter rechnen doch wenn man bei der 7ten Wurzel ist wie dann?

Java:
    public static double sqrt(double x) {
        double q=1.0;
        int step=0;
       
        while(Math.abs(x-q*q)>1e-8) {
            q=(q+x/q)/2;
            step++;
        }
        return q;
    }

Java:
    public static double exp(double x) {
    int n=0;
    double an=1;
    double sn=1;
    while(Math.abs(an)>EPSILON*Math.abs(sn)) {
        an *= x/(n+1);
        sn += an;
        n++;
        }
    return sn;
    }
 

ocsme

Top Contributor
achso hast du es gemeint. Hier hab ich noch einen Link für die herleitung der nten Wurzel so könnte man es sicher auch irgendwie hin bekommen. Da ich noch mehr zu tun habe lasse ich das erst einmal und versuche sowas wieder später :D
https://www.math.uni-sb.de/ag/wittstock/lehre/WS00/analysis1/Vorlesung/node38.html

Kennst du die Algorithmen für exp und ln z. B. die schneller (effizienter) sind als die Reihenentwicklung?
Denn mit der Reihenentwicklung habe ich jetzt einige Funktionen geschrieben das ist ja auch nicht wirklich weiter schwer :D

Hier mal noch ln(x) für -1<x<=1

Java:
    public static double ln1plusX(double x) {
        int n=1;
        double an=x;
        double sn=x;
        while(Math.abs(an)>EPSILON*Math.abs(sn)) {
            an *= -x*n/(n+1);
            sn += an;
            n++;
        }

EPSILON ist eine Konstante bei mir sieht so aus.
Java:
    public final static double EPSILON = 1E-16;
 

mihe7

Top Contributor
Hier hab ich noch einen Link für die herleitung der nten Wurzel so könnte man es sicher auch irgendwie hin bekommen.
Dein n ist aber keine natürliche Zahl.

Kennst du die Algorithmen für exp und ln z. B. die schneller (effizienter) sind als die Reihenentwicklung?
z. B. https://de.wikipedia.org/wiki/BKM-Algorithmus - ansonsten findet man ein Uni-Skript, hab den Link aber nicht mehr - Google hilft.
 

ocsme

Top Contributor
o_O da hab ich gar nicht mehr dran gedacht ich habe ja dann eine Rationale Zahl! mhhh... misst dann weiß ich keine Annäherungsverfahren an eine N-te Wurzel :(
Ich könnte die Zahl mit String in einen Bruch umwandeln doch das Hilft ja alles nix! Komme ich auf eine Primzahl habe ich das Problem mit der doofen Wurzel :(
Denn ich kann ja nicht in meiner POW methode Math.Pow(x, k) = exp(k*ln(x)) benutzen das wäre ja doof :D außer ich nehme meine Reihen oder eben den BKM Algorithmus :D aber erstmal wichtigere Dinge machen das ist ja nur so just for fun =)

Danke für den Link :)
 

ocsme

Top Contributor
Läuft danke ich konnte die Finger doch nicht davon lassen :D
Mit dem Trick von dir echt geiloooo verstehe es zwar nicht zu 100% aber es geht :D

Hier der Code:
Java:
public static double pow(double x, double k) {
        double tmp=1;
        for(int i=1;i<=k;i++) {
            tmp*=x;
        }
        double kk=k-(int)k;
        return tmp*exp(kk*lnxx(x));
    }

System.out.println(Undefined.pow(5, 4.1212));
System.out.println(Math.pow(5, 4.1212));


Ausgabe:
759.6178855890656
759.6178855890657

Nur für -exponenten läuft es nicht da mein log nur für positive x definiert ist und ich keine Ahnung habe wie ich eine negative Variante hin bekomme :D aber so läuft es ja erstmal =)
Ich denke das die Pow methode in java anders läuft es gibt sicher eine Methode die N-Te Wurzel irgendwie so zu berechnen!

LG
 

ocsme

Top Contributor
Nochmals Danke =)

Den Link verstehe ich nicht da wir noch kein c hatten vielleicht verstehe ich das ja auch dann später mal und verstehe wie es RICHTIG gemacht wird :)
Denn ich will es ja auch Ordentlich Lernen :D also viel ÜBEN :)

LG
 

mihe7

Top Contributor
Der wichtige Punkt steht auch im Kommentar:
Code:
3. Return x**y = 2**n*exp(y'*log2)
Ohne das im Detail verstehen zu müssen, kann man erkennen, dass hier letztlich exp(y*log(x)) berechnet werden muss. Die etwas andere Darstellung dürfte sich ergeben, weil hier auf Bit-Ebene mit Gleitkommazahlen nach IEEE-754 gearbeitet wird. Das will ich jetzt aber echt nicht nachvollziehen :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Double or Float zusammenrechnen Java Basics - Anfänger-Themen 15
I Review von euch erwünscht, double Rechnung falsch Java Basics - Anfänger-Themen 34
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
krgewb Double mit zwei Nachkommastellen Java Basics - Anfänger-Themen 2
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
Lion.King Fehler in double und int Java Basics - Anfänger-Themen 7
F java: incompatible types: possible lossy conversion from double to int Java Basics - Anfänger-Themen 1
J Double Variable und Addition Java Basics - Anfänger-Themen 2
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
Kotelettklopfer Variablen Double zwingen Ganzzahlen mit 2 Nachkommastellen auszugeben Java Basics - Anfänger-Themen 10
A possible lossy conversion from double to int Java Basics - Anfänger-Themen 5
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
N The method setSaldo(double) in the type Konto is not applicable for the arguments (int, int) Java Basics - Anfänger-Themen 2
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
V Erste Schritte Die Nuller bei double NICHT abschneiden Java Basics - Anfänger-Themen 4
Y Datentypen Double Division ungenau Java Basics - Anfänger-Themen 45
L Datentypen Rechnen und abrunden mit double Java Basics - Anfänger-Themen 7
M Writer für unterschiedliche Obj/inbt/double erstellen? Java Basics - Anfänger-Themen 1
F Character umwandeln als Double Werte Java Basics - Anfänger-Themen 8
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
P Hilfe bei Double Java Basics - Anfänger-Themen 1
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
M Konvertierung String -> double Java Basics - Anfänger-Themen 8
A Double Scan eingrenzen Java Basics - Anfänger-Themen 2
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
H Double oder nicht? Java Basics - Anfänger-Themen 7
J int array als double array ausgeben Java Basics - Anfänger-Themen 9
M Int und Double in Array speichern Java Basics - Anfänger-Themen 1
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
B Hashing (verkettet/double) Java Basics - Anfänger-Themen 0
L Konvertieren von String zu double?! Java Basics - Anfänger-Themen 6
V Operatoren Warum kommt bei double bei den Nachkommastellen irgendwann eine 2?! (1.20000000000002) Java Basics - Anfänger-Themen 5
geekex Double zu String umwandeln in einer Methode Java Basics - Anfänger-Themen 28
E Bruch erstellen - Von Int zu Double Ergebnis Java Basics - Anfänger-Themen 24
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
I Double.ParseDouble 2 Textfelder Java Basics - Anfänger-Themen 1
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
P Datentypen Kann ich bei double Komma statt Punkt eingeben? Java Basics - Anfänger-Themen 14
E Von Double zu Long umwandeln Java Basics - Anfänger-Themen 9
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
V Variablen Double später deklarieren Java Basics - Anfänger-Themen 7
V double = 1.34823e-300 Java Basics - Anfänger-Themen 5
W double*double error Java Basics - Anfänger-Themen 4
kilopack15 Mehr Nachkommastellen mit double Java Basics - Anfänger-Themen 14
T Input/Output Double und String als Eingabe einlesen Java Basics - Anfänger-Themen 9
J [Rundungsfehler bei Double] Grundkurs Java: Checke Lösungsweg nicht Java Basics - Anfänger-Themen 1
W In einer Function<Double, Double> undefinierte Rechenoperationen abfangen? Java Basics - Anfänger-Themen 3
T set Metode für Double Java Basics - Anfänger-Themen 6
Hijo2006 String to Double Java Basics - Anfänger-Themen 4
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
A Kommafehler beim double einleseen korrigieren Java Basics - Anfänger-Themen 2
K Operatoren The Operator * is undefined for the argument type(s) double, String Java Basics - Anfänger-Themen 4
das_leon String zu double konventieren Java Basics - Anfänger-Themen 1
K Genauer als Double? Java Basics - Anfänger-Themen 4
T Double.parseDouble(args[0]) Java Basics - Anfänger-Themen 13
A Java Ungenauigkeit double Java Basics - Anfänger-Themen 6
B Methoden The method mirror(double[]) in the type Convolution is not applicable for the arguments (double) Java Basics - Anfänger-Themen 8
C Typumwandlung von int<-->double Java Basics - Anfänger-Themen 6
M Double Wert auf 2 Kommastellen runden Java Basics - Anfänger-Themen 2
S Regelabfragen aus Double-Array Java Basics - Anfänger-Themen 2
A Erste Schritte Double Wert aus String zu int Java Basics - Anfänger-Themen 2
P Rückgabe erflogt nicht als Double Java Basics - Anfänger-Themen 2
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
P scanner ein Double einlesen Java Basics - Anfänger-Themen 10
T Java double berechnung fehler Java Basics - Anfänger-Themen 2
S double[x] , double[y] zu Point[] points kopieren? Java Basics - Anfänger-Themen 15
G double in float umwandeln Java Basics - Anfänger-Themen 2
F double[] an andere Methode übergeben Java Basics - Anfänger-Themen 1
B Datentypen Test float und double speichern Zahlen nur ungefähr Java Basics - Anfänger-Themen 4
S Datentypen double - kommastellen abschneiden Java Basics - Anfänger-Themen 6
M int double int double Graph Java Basics - Anfänger-Themen 3
K ArrayList<Double> --> double[] array Java Basics - Anfänger-Themen 5
Z Double in komma und Punkt akzeptieren -> Robusteeingabe Java Basics - Anfänger-Themen 7
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
B Datentypen Multiplzieren mit double wird ungenau Java Basics - Anfänger-Themen 4
K Von einem Double wert nur die Zahl vor dem Komma verwenden Java Basics - Anfänger-Themen 9
F Double neu formatieren mit NumberFormat Java Basics - Anfänger-Themen 2
M Double-Ausgabe in JTextField fehlerhaft Java Basics - Anfänger-Themen 2
T Problem mit double-Formatierung Java Basics - Anfänger-Themen 3
M Double Zahl in Grad Zahl Java Basics - Anfänger-Themen 7
M Datentypen Ergebniss- Double to String- wird nicht angezeigt Java Basics - Anfänger-Themen 13
S Double mithilfe eines Scanners so einlesen, dass ich damit rechnen kann Java Basics - Anfänger-Themen 4
M Die Double-Variable rundet? Java Basics - Anfänger-Themen 1
llabusch Methoden Methoden überlagern - entweder int || double Java Basics - Anfänger-Themen 10
S Double, int, Berechnung Java Basics - Anfänger-Themen 3
K Datentypen Wertebereich float/double - Warum nicht hoch -1 Java Basics - Anfänger-Themen 6
A Double[] Array zahlen per Argument übergeben Java Basics - Anfänger-Themen 5
B Erste Schritte Addition von double in switch-Anweisung Java Basics - Anfänger-Themen 2
D Unterschied zwischen double und Double Java Basics - Anfänger-Themen 4
M Double-Zahlen auf Intervalle runden Java Basics - Anfänger-Themen 3
D Schon wieder double -.- Java Basics - Anfänger-Themen 4
V Object in double? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben