Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem: 'ungültige Gleitkommaoperation' (https://www.delphipraxis.net/166937-problem-ungueltige-gleitkommaoperation.html)

C0M3T 6. Mär 2012 16:50

Problem: 'ungültige Gleitkommaoperation'
 
Hallo liebe Community,

Dies ist mein erster Post hier, also lasst bitte Nachsicht walten :).
Ich bin leider noch ein ziemlicher Anfänger bei Delphi und stehe nun vor
meinem ersten "schier unlösbaren Problem".
Und zwar bin ich gerade dabei einen simplen Gleichungslöser für quadratische
Gleichungen der allgemeinen Form 0=ax²+bx+c zu basteln (a ungleich 0). Dabei soll mir
das Programm die Lösungsformel für quadr. Gleichungen ( (-p/2)+-Wurzel((p/2)²-q) )
benutzen und die zwei Ergebnisse (x1; x2) in zwei separaten Edit-Feldern ausgeben.
Delphi sagt mir in meinem Quellcode seien keine Fehler enthalten, dennoch erscheint,
wenn ich das Programm starte und Werte eingebe folgende Fehlermeldung:

Exception-Klasse EInvalid OP mit Meldung 'ungültige Gleitkommaoperation'


Hier ist mein Quellcode:

Delphi-Quellcode:
procedure TForm3.Button2Click(Sender: TObject);
 var a,b,c,d,f:real;
begin
 a:=strtofloat(edit1.text);
 b:=strtofloat(edit2.text);
 c:=strtofloat(edit3.text);
 d:=((b/a)/2)+sqrt(((b/a)/2)*((b/a)/2)-c/a);
 Edit4.Text:=FloatToStr(d);
 f:=((b/a)/2)-sqrt(((b/a)/2)*((b/a)/2)-c/a);
 Edit5.Text:=FloatToStr(f);
end;
Woran könnte das liegen?, bzw. welchen Fehler habe ich gemacht?
Ich danke euch schon einmal im Voraus für jede Antwort!

Bummi 6. Mär 2012 17:02

AW: Problem: 'ungültige Gleitkommaoperation'
 
Du solltest überprüfen ob a=0 und gegf. eine Meldung ausgeben ohne zu rechnen
Du solltest vor Wurzeln ziehst prüfen ob die Zahl negativ ist und s.o.

DeddyH 6. Mär 2012 17:04

AW: Problem: 'ungültige Gleitkommaoperation'
 
Hallo und Willkommen in der DP :dp:,

könnte es sein, dass
Zitat:

Delphi-Quellcode:
((b/a)/2)*((b/a)/2)-c/a

einen negativen Wert ergibt? Daraus die Wurzel zu ziehen dürfte nicht funktionieren.

jaenicke 6. Mär 2012 17:13

AW: Problem: 'ungültige Gleitkommaoperation'
 
Zitat:

Zitat von C0M3T (Beitrag 1154811)
dennoch erscheint,
wenn ich das Programm starte und Werte eingebe folgende Fehlermeldung:

Und welche Werte?

Popov 6. Mär 2012 17:13

AW: Problem: 'ungültige Gleitkommaoperation'
 
Es ergibt sich nicht immer ein Fehler, aber z. B. hier

Delphi-Quellcode:
 d:=((8/5)/2)+sqrt(((8/5)/2)*((8/5)/2)-4/5);
Gekürzt

Delphi-Quellcode:
 d:=((8/5)/2)+sqrt(0);
Und das klappt nicht

Delphi-Quellcode:
sqrt(0)

Bummi 6. Mär 2012 17:18

AW: Problem: 'ungültige Gleitkommaoperation'
 
@Popov

sorry, aber Quark SQRT(0) ist kein Problem, SQRT(-0.16) ,korrekt "gekürzt", schon

Popov 6. Mär 2012 17:24

AW: Problem: 'ungültige Gleitkommaoperation'
 
Hast Recht, der Fehler tritt zwei mal auf. Hab die zweite Meldung der ersten Formel zugeordnet.

TiGü 6. Mär 2012 17:51

AW: Problem: 'ungültige Gleitkommaoperation'
 
Warum ziehst nicht einfach eine komplexe Wurzel?

C0M3T 6. Mär 2012 18:19

AW: Problem: 'ungültige Gleitkommaoperation'
 
Vielen Dank, für die zahlreichen Antworten!
Nun, wie kann ich denn dem Progi "sagen", dass es hier bei Negativen Werten,
beispielsweise sqrt(-4), eine Meldung mit
'Nicht lösbar' ausgibt ?
Mit einem "If-Then-Befehl"?

Popov 6. Mär 2012 18:23

AW: Problem: 'ungültige Gleitkommaoperation'
 
Ich tendiere immer dazu alles vorher zu überprüfen, da ich keine Überraschungen mag. Also wie ich es machen würde, wahrscheinlich kompliziert.

Alternativ kannst du die Rechnung in ein Try-Except-End Block packen. Gibt es einen Fehler, wird der Teil in Except ausgeführt.

Aber mal gucken was die anderen vorschlagen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz