# Falsche Ergebnisse bei PQ-Formel Berechnung



## ehlr (18. Dez 2011)

Hallo.
Ich möchte mit meinem Programm durch Eingabe von zwei Variablen (p und q) die PQ-Formel zur Berechnung der Nullstellen einer Parabel benutzen.
Leider erhalte ich immer ein falsches Ergebnis.

Bsp. : Ich gebe folgendes ein : p=7 q=4. Als Ergebnis müsste für X1 = -6,4 und für X2 = 0,6 ausgegeben werden. Jedoch wird X1 = -2,5 und X2 = -4,5 ausgegeben.

_Quelltext, den ich bisher erarbeitet habe :_


```
double x1new = -(x1/2) + ( ( (x1/2)*(x1/2) - x2 ) / ( (x1/2)*(x1/2) - x2 ) ) ; // PQ Formel 
double x2new = -(x1/2) - ( ( (x1/2)*(x1/2) - x2 ) / ( (x1/2)*(x1/2) - x2 ) ) ; // ""
					
DecimalFormat f = new DecimalFormat("#.000000000000000"); // 1 Vorkommastelle und 15 Nachkommastellen
String ausgabex1 = f.format(x1new); // Double x1 -> String
String ausgabex2 = f.format(x2new); // Double x2 -> String
					
lbl5.setText(ausgabex1); // Ausgabe x1
lbl6.setText(ausgabex2); // Ausgabe x2
```


_PQ Formel :_






copyright : www(.)pqformel(.)de



lg
ehlr


----------



## gman (18. Dez 2011)

Hi,

in der PQ-Formel kommt eine Wurzel vor, in deinen Berechnungen nicht.


----------



## MFM (18. Dez 2011)

mach mal einen Import von der java.lang.Math; 


```
double x1new = -(x1/2) + Math.sqrt(Math.pow((x1/2), 2) - x2);
```
  müsste dann x1 ergeben.


----------



## ehlr (18. Dez 2011)

gman hat gesagt.:


> Hi,
> 
> in der PQ-Formel kommt eine Wurzel vor, in deinen Berechnungen nicht.



Wurzel ist ja eigentlich nichts anderes als durch sich selber teilen.
Das hier ersetzt ja die Wurzel :

( (x1/2)*(x1/2) - x2 ) */* ( (x1/2)*(x1/2) - x2 )




MFM hat gesagt.:


> mach mal einen Import von der java.lang.Math;
> 
> 
> ```
> ...



X1 ist dann aber 1,208712152 und nicht -6,4


----------



## xehpuk (18. Dez 2011)

ehlr hat gesagt.:


> Wurzel ist ja eigentlich nichts anderes als durch sich selber teilen.
> Das hier ersetzt ja die Wurzel :
> 
> ( (x1/2)*(x1/2) - x2 ) / ( (x1/2)*(x1/2) - x2 )


Ich hoffe, das ist nicht dein Ernst.

x / x = 1 (x != 0)

Poste doch mal den kompletten Berechnungscode.


----------



## MFM (18. Dez 2011)

genau, Du teilst ja Deinen Term durch sich selbst, das ist ja nicht die Definition der Wurzel.

Dennoch, schau Dir meinen Code mal an und auch die java.Lang.Math, denn genau dazu ist sie doch da  Eigene Implementierung birgt immer Fehler, die Du so nicht machst, sofern die Methoden richtig implementiert sind. Aber das wäre mittlerweile wohl rausgekommen.

btw, ich bekomme mit meinem Code das korrekte Ergebnis, sofern die Formel stimmt, die Du hingeschrieben hast.


----------



## gman (18. Dez 2011)

Deine Variablen sind auch ungünstig benannt:

Warum p und q nicht auch einfach so nennen anstatt x1 und x2?
Dann sind die Namen auch frei und du musst nicht x1new und x2new
nehmen. Klingt banal aber solche Sachen helfen enorm dabei den 
Code zu verstehen.


----------



## ehlr (18. Dez 2011)

MFM hat gesagt.:


> genau, Du teilst ja Deinen Term durch sich selbst, das ist ja nicht die Definition der Wurzel.
> 
> Dennoch, schau Dir meinen Code mal an und auch die java.Lang.Math, denn genau dazu ist sie doch da  Eigene Implementierung birgt immer Fehler, die Du so nicht machst, sofern die Methoden richtig implementiert sind. Aber das wäre mittlerweile wohl rausgekommen.
> 
> btw, ich bekomme mit meinem Code das korrekte Ergebnis, sofern die Formel stimmt, die Du hingeschrieben hast.



Leider bekomme ich mit dem Code auch ein falschen Ergebnis :

```
double pdurch2 = x1/2;
double x1new = - pdurch2 + Math.sqrt(Math.pow(pdurch2, 2) - x2);
double x2new = - pdurch2 - Math.sqrt(Math.pow(pdurch2, 2) - x2);
```

Siehe Bildschirmfoto :







In rot ist das richtige Ergebnis.


----------



## Gast2 (18. Dez 2011)

Der Code funktioniert doch prima:

```
double p = 6d;
		double q = -4d;

		double pdurch2 = p/2;
		double x1new = - pdurch2 + Math.sqrt(Math.pow(pdurch2, 2) - q);
		double x2new = - pdurch2 - Math.sqrt(Math.pow(pdurch2, 2) - q);

		System.out.println(x1new);
		System.out.println(x2new);
```
Lässt du dir vllt andere Werte im Label anzeigen?


----------



## xehpuk (18. Dez 2011)

Ich sagte doch bereits, dass du den ganzen Code posten sollst, denn der Fehler liegt an einer Stelle, die du uns nicht gezeigt hast:
x1 und x2 haben bei dir denselben Wert, nämlich den von p.


----------



## ehlr (18. Dez 2011)

EikeB hat gesagt.:


> Der Code funktioniert doch prima:
> 
> ```
> double p = 6d;
> ...



Um es dann im Label anzuzeigen habe ich noch..... hier der Code :


```
double pdurch2 = x1/2;
				    double potenz = Math.pow(pdurch2, 2);
					double x1new = - pdurch2 + Math.sqrt(potenz - x2);
					double x2new = - pdurch2 - Math.sqrt(potenz - x2);  //-(x1/2) - ( ( (x1/2)*(x1/2) - x2 ) / ( (x1/2)*(x1/2) - x2 ) )
					
					DecimalFormat f = new DecimalFormat("#.000000000000000"); // mind. 1 vorkommastelle und x nachkommastellen
					String ausgabex1 = f.format(x1new); // x1 double wird in string ausgabex1 gewandelt
					String ausgabex2 = f.format(x2new); // x2 double wird in string ausgabex1 gewandelt
					
					lbl5.setText(ausgabex1); //ausgabe x1
					lbl6.setText(ausgabex2); //ausgabe x2
```


Und so hole ich es aus dem Label raus : 


```
x1 = Double.parseDouble(field1.getText()); // eingabe string -> double
					x2 = Double.parseDouble(field1.getText()); // "
```


----------



## Gast2 (18. Dez 2011)

Wenn vorher x1 = 6 und x2 = -4 ist, dann funktioniert dein Code


----------



## ehlr (18. Dez 2011)

Okay... Leute ich sollte mich schämen 


```
p = Double.parseDouble(field1.getText()); // eingabe string -> double
q = Double.parseDouble(field1getText()); // "
```
Da oben ist p = field1 und q = field 1 *schäm*

Tut mir Leid, war wohl ein Anfängerfehler 


Danke für eure Hilfe!!!


----------

