Wisch Schmob: Wurzelbestimmung mit ...

Hallo wieder mal, Wischmob meldet sich zurück!

Hier ist ein kleiner Code, den ich grade geschrieben habe, der aber leider
nicht so richtig funzt:

  
public class sqrt{  
	public static void main(String[] args){  
  
	// Die Variablen deklarieren  
	double wert=Double.parseDouble(args[0]);  
	double epsilon = 0.00000000000001;  
	double step = 10;  
	double wurzel = 0;  
	  
		if(wert >= 0){  
			// Ausführen, solange die Bedingung erfüllt ist  
			while(Math.abs(wurzel*wurzel-wert)>epsilon){  
				step = step/10;  
				while(wert>wurzel*wurzel){  
					wurzel = wurzel+step;  
					//System.out.println(wurzel);  
				}  
				wurzel = wurzel-step;  
				//System.out.println("	"+step);  
				  
			}  
			  
			// Wurzel "ausdrucken"  
			System.out.println(wurzel);  
		}  
		else{  
			System.out.println("Negative Werte sind ungültig!");  
		}  
	}  
}  

Funktioniert alles soweit, Wurzel 0 okay, Wurzel 2 okay, Wurzel 4 okay, Wurzel 1: Nicht Okay!

Herauskommen bei 1, 9, 16 und mehr kommen immer etwas kleinere Werte raus, bei Wurzel 1 z.b. 0.9999999999999999 und bei 9 und 16 ähnliches.

woran mag das wohl liegen?

weiß jemand, wie man das verbessern kann?

danke, euer Wischmob!

  1. @@Wisch Schmob:

    nuqneH

    Herauskommen bei 1, 9, 16 und mehr kommen immer etwas kleinere Werte raus, bei Wurzel 1 z.b. 0.9999999999999999 und bei 9 und 16 ähnliches.

    woran mag das wohl liegen?

    Das steht schon auf der Startseite des Forums: „Lies unsere FAQ, dort sind häufig gestellte Fragen direkt beantwortet.“

    Vielleicht fängst du hinten an zu lesen.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Hey Wischer! Probier mal das hier:

      public class sqrt{
      public static void main(String[] args){

      // Die Variablen deklarieren  
      double wert=Double.parseDouble(args[0]);  
      double epsilon = 0.00000000000001; // Wenn immer ich hier 1e-15 geschrieben habe, kam immer bei Wurzel 4 1.99999999999998 oä raus  
      double step = 10;  
      double wurzel = 0;  
        
      	if(wert >= 0){  
      		// Ausführen, solange die Bedingung erfüllt ist  
      		while(Math.abs(wurzel\*wurzel-wert)>epsilon){  
      			step = step/10;  
      			while(wert>wurzel\*wurzel){  
      				wurzel = wurzel+step;  
      				//System.out.println(wurzel);  
      				  
      			}  
      			if(Math.abs(wurzel\*wurzel-wert)>epsilon){  
      				wurzel = wurzel-step;  
      			}  
      			//System.out.println("	"+step);  
      			  
      		}  
      		  
      		// Wurzel "ausdrucken"  
      		System.out.println(wurzel);  
      	}  
      	else{  
      		System.out.println("Negative Werte sind ungültig!");  
      	}  
      }  
      

      }

      Wenn das nicht klappt kannst du auch mal mit break ran!

      Mfg Kieselnator

      1. Hey cool, das funzt! Danke euch beiden...