Quadratische Gleichungen mit Delphi lösen

Diskutiere Quadratische Gleichungen mit Delphi lösen im Developer Network Forum im Bereich Hardware & Software Forum; Hi ich habe versucht ein Programm zum lösen von quadratischen Gleichungen zu schreiben. Es wird jedoch jedes Mal ein falsches Ergebnis geliefert...
  • Quadratische Gleichungen mit Delphi lösen Beitrag #1
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
Hi

ich habe versucht ein Programm zum lösen von quadratischen Gleichungen zu schreiben. Es wird jedoch jedes Mal ein falsches Ergebnis geliefert. Ich habe festgestellt, dass die Umwandlung der Zahl aus dem Edit-Feld, von String in Float(also real) nicht richtig funktioniert. Die Funktion StrToFloat liefert immer irgendein krummes Ergebnis.

hier der Code:

procedure TForm1.BtLoesenClick(Sender: TObject);
var
x1,x2: real;
begin
x1 := -(StrToFloat(Edp.text) / 2) + sqrt(sqr(StrToFloat(Edp.text)) / 2) - StrToFloat(Edq.text);
x2 := -(StrToFloat(Edp.text) / 2) - sqrt(sqr(StrToFloat(Edp.text)) / 2) - StrToFloat(Edq.text);
LbX1.Caption := FloatToStr(x1);
LbX2.Caption := FloatToStr(x2);
end;


Wo liegt da der Fehler?

D.S.
 
  • Quadratische Gleichungen mit Delphi lösen Beitrag #2
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Ähm, wie hast Du denn oben die Lösungsgleichung umgestellt?

x1/2 = +/- sqrt ((p/2)²-q)

Dementsprechend muß Dein Code so angepaßt werden:

Code:
procedure TForm1.Button1Click (Sender: TObject);
var
  x1,x2	: real;
  p, q	: Real;
begin
  p	:= StrToFloat (Edp.text);
  q	:= StrToFloat (Edq.text);
  x1	:= + sqrt (sqr (p / 2) - q);
  x2	:= - sqrt (sqr (p / 2) - q);
  LbX1.Caption := FloatToStr (x1);
  LbX2.Caption := FloatToStr (x2);
end;

Welche Feststellungen hast Du bei StrToFloat gemacht? Wurde statt z.B. 4 so was ausgerechnet: 3.999999999996 oder auch 4.000000000000002? Dann liegt das an der internen Verarbeitung von Floats.

Falls Du mal eine Rechnung machst, und erwartest, genau eine natürliche herauszubekommen, dann mußt Du immer auf einen Bereich testen:
Code:
if (Abs (x - xExpected) < xEpsilon) then
  DoSomething;
x ist dabei Dein errechnetes Ergebnis, xExpected Dein Vergleichswert (z.B. 0) und xEpsilon (z.B 10E-8) die Schwelle, ab der Du sagst, jetzt ist das Ergebnis erreicht.

O Love

------------------
"I will not abide disobedience!"
 
  • Quadratische Gleichungen mit Delphi lösen Beitrag #3
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
Hi

also so weit ich weiß lautet die Formel für quadratische gleichungen so: x1/2 = -(p/2) +/- sqrt ((p/2)²-q)

jetzt klappt es auch. Es lag nicht an der Umwandlung, sonder daran, dass ich einige Klammern falsch gesetzt habe. So funzt es:

...
x1 := -(p / 2) + sqrt(sqr(p / 2) - q);
x2 := -(p / 2) - sqrt(sqr(p / 2) - q);
...

D.S.
 
  • Quadratische Gleichungen mit Delphi lösen Beitrag #4
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Stimmt. Ich habe gerade in der "Kleinen Enzyklopädie der Mathematik" nachgeschaut, die von Dir genannte Formel ist korrekt. Mist, Schule ist schon so lange her...

O Love

------------------
"I will not abide disobedience!"
 
Thema:

Quadratische Gleichungen mit Delphi lösen

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben