# Problem beim Berechnen der Quadratwurzel



## Chal (31. Okt 2008)

Für die Schule sollen wir zwei Methoden schreiben, welche zum einen das arithmetische Mittel zweier Zahlen und zum anderen die Quadratwurzel einer Zahl berechnen sollen.
Das arithmetische Mittel war kein Problem und die Quadratwurzel sollte _eigentlich_ auch ohne Probleme funktionieren, allerdings rechnet Java auf eine Art, die ich nicht nachvollziehen kann.
Nebeninfo: Ich benutze das normale JDK von Sun und BlueJ.

Mein Code zum Berechnen der Wurzel sieht wie folgt aus:

```
public class Berechnungen
{
    private double x;

    public Berechnungen()
    {
        x = 2;
    }

    public double quadratwurzel(int a)
    {
        int i;
        for( i = 0; i <= 1000; i++)
            x = (1 / 2) * (x + a / x);
        return x;
    }
}
```
Die Rechnung innerhalb der for-Schleife ist ein Verfahren, mit dessen Hilfe man einen Näherungswert bekommt. Je öfter man die Rechnung durchführt, desto genauer ist das Ergebnis. Die Variable a ist hierbei die Zahl, aus der die Wurzel gezogen werden soll.
Den Namen des Verfahrens habe ich leider vergessen.   

Auf jeden Fall gibt mir Java als Ergebnis "NaN", wenn ich die Methode laufen lasse. Ich habe es auch einmal mit der Abbruchbedingung i <= 0 versucht um zu sehen, was bei einem einzelnen Durchlauf passiert und da habe ich beim Beispiel a = 3 das Ergebnis 0.0 erhalten.
Normalerweise müsste ich allerdings von BlueJ eine Fehlermeldung erhalten, dass durch 0 geteilt würde, wenn ich mehr als einen Schleifendurchlauf einstelle, da x ja nach dem ersten Durchlauf schon 0 ist und somit beim zweiten durch 0 geteilt würde.
Diesen Fehler hatte ich nämlich vorher, da x ein integer und kein double war.

Wenn ich selbst auch nachrechne, was ich bei der Rechnung innerhalb der Schleife bei einem Durchgang erhalten würde, käme bei mir nicht 0.0, sondern sieben viertel als Ergebnis.

Habt ihr vielleicht eine Idee, was an meiner Methode/Klasse falsch ist?


----------



## Illuvatar (31. Okt 2008)

> ```
> (1 / 2)
> ```



Das wird als ints interpretiert. Das Ergebnis davon ist deshalb 0. Wenn du z.B. (1.0 / 2) schreibst, funktioniert das ganze.


----------



## Chal (31. Okt 2008)

Ah, jetzt funkioniert es.
Vielen Dank für die Hilfe!


----------



## Landei (1. Nov 2008)

Wieso ist das x eine Membervariable? Es ist besser, wenn x eine lokale Variable in quadratwurzel ist und dort initialisiert wird. Weiterhin würde ich vor der Schleife die Fälle x<0 und x == 0 abfangen.


----------

