Hallo,
wieso kann ich nicht das Ergebnis zurück geben?
Java:
publicclassMyClass{privatestaticfinaldouble TOLERANZ =0.00000001;staticdouble ergebnis;staticBoolean bo;staticint t =1;publicstaticdoublemacheEtwas(double n){
ergebnis =0.0;
bo =true;while(true){
ergebnis =Math.pow(-1, t +1)*(Math.pow(n, t)/ t);if(Math.abs((Math.pow(n, t)/ t))< TOLERANZ){
bo =false;}
t = t +1;}return ergebnis;// Hier ist das Problem ich kann das nicht zurückgeben. }}
Vielleicht achtest du mal darauf, was der Compiler (bzw. die IDE) dir als Fehlermeldung gibt: "Unerreichbarer Code".
Das heißt, deine Endlosschleife dadrüber beendet sich niemals.
Ne es funktioniert genau diese Codeteil nicht. Ich habe TOLERANZ = 0.1 gesetzt und trotzdem tut garnichts;
Ich weis nicht mehr wie ich das Problem losen kann.
Der Fehler war Start bei 0.0 und noch größerer Fehler war, dass es diese Formel nur für zahlen im Intervall x > 0 und x < 1 funktioniert. Ich bekomme nicht korrektes Ergebnis, aber werde ich noch das Programm verbessern.
Was mache ich Falsch bekomme nicht korrekte Werte.
Java:
privatestaticfinaldouble DELTA =0.000001;staticdouble ergebnis =0;staticBoolean bo;staticint k =1;staticdouble t =0;publicstaticdoublemeinMeth(double z){
bo =true;while(bo){
ergebnis = z -(Math.pow((-1), k +1)*(Math.pow(z, k)/ k));
t =Math.abs((Math.pow(z, k)/ k));if(t < DELTA){
bo =false;}
k = k +1;}return ergebnis;}
Schau mal genau hin, was Du als ergebnis in Deiner Schleife berechnest.[/QUOTE]
Java:
ergebnis = z -(Math.pow(-1, k +1)*(Math.pow(z, k)/ k));
t =Math.abs((Math.pow(z, k)/ k));
Mein Ergebnis berechne ich solange bis die mein t [java=code] t = Math.abs((Math.pow(z, k) / k)); [/code]
kleiner als mein Toleranzwert ist. Im Formel Steht genauso oder nicht?
Ich teste mit folgenden Zahlen 0.4, 0.5, 0.8, und 1.0, Weil diese Formel nur für die Zahlen x > 0 und x <= 1 funktioniert.
Ausgabe bekomme ich folgende:
ln(0.4) = 0.4000005162220308
ln(0.5) = 0.4999990463256836
ln(0.8) = 0.8000009679142882
ln(1.0) = 1.000000999999
Java:
bo =true;while(bo){
ergebnis = z +(Math.pow((-1), k +1)*(Math.pow(z, k)/ k));
t =Math.abs((Math.pow(z, k)/ k));if(t < DELTA){
bo =false;}
k = k +1;
Das Problem ist jetzt, dass damit nur die erste Iteration berechnet wird.
Ich will aber damit ln(x) berechnen.
publicclassTest{publicstaticdoublemeinMeth(double z){boolean bo =true;double t;double DELTA =0.0000000001;double ergebnis =0.0;int k =1;while(bo){
ergebnis = ergebnis +(Math.pow((-1), k +1)*(Math.pow(z, k)/ k));
t =Math.abs((Math.pow(z, k)/ k));if(t < DELTA){
bo =false;}
k = k +1;}return ergebnis;}publicstaticvoidmain(String[] args){System.out.println(meinMeth(0.9));System.out.println(Math.log(1.9));}}