Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi FloattoStr führt zu Ungültige Gleitkommaoperation (https://www.delphipraxis.net/110526-floattostr-fuehrt-zu-ungueltige-gleitkommaoperation.html)

v2afrank 19. Mär 2008 13:24


FloattoStr führt zu Ungültige Gleitkommaoperation
 
Hallo, ich habe hie ein Programm, was bei einem Kunden mit der Fehlermeldung "Ungültige Gleitkommaoperation" absürzt.
Ich konnte den Fehler jetzt in folgender Zeile festmachen:
Delphi-Quellcode:
 AbzuspeicherndeZeile:=FloatToStrF(Uist, ffFixed, 18, 2);
Uist ist hier als Extended deklariert. Wann kann es zu so einer Fehlermeldung kommen ? Ich habe aber momentan keine Idee, was UIst für einen Wert hat.

Fussball-Robby 19. Mär 2008 13:35

Re: FloattoStr führt zu Ungültige Gleitkommaoperation
 
Zeig mal ein bisschen mehr Code, ich kann da nämlich keinen Fehler entdecken. Und guck mal nach, was Uist für einen Wert hat.

Mfg

3_of_8 19. Mär 2008 13:38

Re: FloattoStr führt zu Ungültige Gleitkommaoperation
 
Setz nen Breakpoint, drück Strg+F7 und gib Uist ein.

taaktaak 19. Mär 2008 13:39

Re: FloattoStr führt zu Ungültige Gleitkommaoperation
 
Moin, Moin,

was ist denn das für eine seltsame "AbzuspeicherndeZeile" die mit einem Gleitkommawert indiziert wird? Haben Zeilen nicht immer einen ganzzahligen Index?

// edit : und noch dazu als String???

3_of_8 19. Mär 2008 13:48

Re: FloattoStr führt zu Ungültige Gleitkommaoperation
 
Vielleicht er ja den Extended als String abspeichern? ;)

v2afrank 19. Mär 2008 14:04

Re: FloattoStr führt zu Ungültige Gleitkommaoperation
 
Ja, AbzuspeicherndeZeile ist ein String, den ich abspeichern möchte, der eben diese Extendedwert beinhaltet. Einen Breakpoint kann ich leider nicht setzen, da dieser Fehler beim Kunde auftritt. Leider auch nur selten.

Fussball-Robby 19. Mär 2008 16:27

Re: FloattoStr führt zu Ungültige Gleitkommaoperation
 
Ich will ja ungern diese Raterunde hier unterbrechen, aber zeig doch mal ein bisschen mehr Code, vielleicht könnten wir den fehler dann eventuell unter Umständen möglicherweise finden :wink:

v2afrank 20. Mär 2008 05:53

Re: FloattoStr führt zu Ungültige Gleitkommaoperation
 
Da ist ja das Problem. Hier ist der komplette Codeausschnitt wo der Fehler auftritt
Delphi-Quellcode:
 
         for j := Cnt to Programm.Steps.Item[i].IstValues.Count-1 do
          begin
            Zeile := FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].Uist, ffFixed, 18, 2) +
                     #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].Iist, ffFixed, 18, 2) +
                     #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].Qist, ffFixed, 18, 2) +
                     #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].TempRegel, ffFixed, 18, 2) +
                     #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].Temp1, ffFixed, 18, 2) +
                     #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].Temp2, ffFixed, 18, 2) +
                     #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].StepTime, ffFixed, 18, 2);
            Ini.WriteString(('Istwerte Schritt ' + IntToStr(i)), ('Wert ' + IntToStr(j)), Zeile);
          end;
Die ganzen Programm.Steps.Item[i].IstValues.Item[j].Uist, Iist... sind alle als Extended deklariert. Mehr passiert hier nicht, und trotzdem hat mir Madexcept in der Zeile den Fehler FloatToStrF(... "Ungültige Gleitkommaoperation" angegeben.
Kann es was mit FPU-Exceptions zu tun haben ?

Union 20. Mär 2008 09:17

Re: FloattoStr führt zu Ungültige Gleitkommaoperation
 
Einer der Werte hat wahrscheinlich einen zu großen Exponenten, wodurch es bei der Gleitkommaoperation zu einen Stack-Überlauf kommt. Das kann dadurch sein, dass einer der Messwerte gegen Null geht (aber nicht Null und auch nicht -∞ ist). Vorschlag: Schreib Dir eine eigene FloatToStrDef Funktion, die die Exceptions behandelt und den Rückgabewert auf den Standard setzt.

v2afrank 25. Mär 2008 06:04

Re: FloattoStr führt zu Ungültige Gleitkommaoperation
 
Werde ich machen. Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 Uhr.

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