Java 3. wurzel will nicht

striker159

Lt. Junior Grade
Registriert
Dez. 2008
Beiträge
327
hallo.
in dem folgenden codeausschnitt geht es um die lösung einer kubischen gleichung.
a,b,c,d sind die koeffizienten.
Code:
		double p = (3*a*c-b*b)/(3*a*a);
		double q = 2*b*b*b/(27*a*a*a) - b*c/(3*a*a) + d/a;
                double diskriminante = q*q/4 + p*p*p/27;
[...]
				double u = Math.pow(-q/2+Math.sqrt(diskriminante),(1.0/3));
				double v = Math.pow(-q/2-Math.sqrt(diskriminante),(1.0/3));
				double j = (u+v)/(-2)-b/(3*a);
				double k = (u-v)/2*Math.sqrt(3);
				x1 = u+v-b/(3*a);
				System.out.println("x1 ist : "+x1);
				System.out.println("x2 ist : "+j+" + "+k+" * i");
				System.out.println("x2 ist : "+j+" - "+k+" * i");

v wird hierbei jedoch nicht berechnet (NaN).
kennt jemand den grund dafür?
 
Mach halt mal nen syso von -q/2 und Math.sqrt(diskriminante), wahrscheinlich kommt bei der Subtraktion eine negative Zahl raus und das ist bei Math.pow wohl nicht erlaubt, da das Ergebnis in den Irrationalen Zahlen liegt und damit nicht als float, bzw. double angegeben werden kann.

Es liegt also wohl ein mathematisches Problem vor.
 
setze zwischenvariablen ein, damit du weißt was in v genau berechnet wird. Wahrscheinlich kommt eine nicht darstellbare double zahl heraus
 
Oder du machst ne Interpolation:
Code:
public int sqrt3(int i){
return 42;
}
 
Zurück
Oben