Problem mit Float 1.#INF, -1.#INF ?
-
Hallo zusammen. Hier ist mein Code
... Code ... ```FL8 f8=FL8_MAX; f8*=2; const CString s1=FL8ToStr (f8); INFO (s1); FL8 f82=-1; f82=StrToFL8 (s1); const CString s2=FL8ToStr (f82); INFO (s2);``` s1 wird nicht den Wert von f8 habe sonst 1.#INF, deswegen wird s2 nur als 1 definiret. Die Frage: 1- Ist es möglich, das Probem von 1.#INF zu lösen und Wie . 2-oder eine Fehlermeldung in der methode von FL8ToStr (); zu programmieren .
-
Zu 1: Welches Problem genau? Bei
f8*=2
würde eine Zahl entstehen die zu gross für den TypFL8
ist, daher wird die "special value"1.#INF
(positive infinity) statt des ergebnisses abgespeichert. Das sind nunmal die Regeln. UndFL8ToStr()
gibt bei "positive infinity" halt den String "1.#INF" zurück.Zu 2: Wenn du
FL8ToStr
modifizieren kannst, dann kannst du natürlich "eine Fehlermeldung programmieren". Die Frage ist nur: Wie soll diese Fehlermeldung aussehen?Die "korrekte" Lösung wäre vermutlich der Funktion
StrToFL8
beizubringen die Strings1.#INF
und-1.#INF
korrekt zu parsen.
-
@hustbaer
Danke dir zu 1 das sind Regeln.FL8ToStr kann man modifizieren, deswegen hab mir gedacht, dass ich eine Massgebox als INFO programmiere, wenn die Zahl größer als FL8_MAX .
aber warum wird f82 durch f82=StrToFL8 (s1); nicht die gleiche wert wie f8 egal ob es 1.#INF. sonderen 1.
-
@rare sagte in Problem mit Float 1.#INF, -1.#INF ?:
FL8ToStr kann man modifizieren, deswegen hab mir gedacht, dass ich eine Massgebox als INFO programmiere, wenn die Zahl größer als FL8_MAX .
Halte ich für keine gute Idee. Bei den allermeisten Funktionen die man so schreibt wäre es schlecht, wenn diese eine MessageBox anzeigen würden um Probleme (Fehler/Warnungen) zu kommunizieren. Stell dir vor du liest ein Datenfile ein mit zigtausend Zeilen, und musst dann zigtausendmal auf "OK" klicken wenn in dem File entsprechend viele "problematische" Zeilen vorhanden sind.
Bzw. noch schlimmer: wenn das Programm automatisiert laufen soll. Da sieht dann nichtmal jemand dass ne MessageBox aufgeht, sondern das Programm bleibt einfach hängen.
aber warum wird f82 durch f82=StrToFL8 (s1); nicht die gleiche wert wie f8 egal ob es 1.#INF. sonderen 1.
Naja weil
StrToFL8
offenbar so implementiert ist dass es "1.#INF" nicht korrekt erkennt. Ich würde vermuten dassStrToFL8
einfach Zeichen einliest so lange diese zu einer dezimalen Darstellung einer Zahl passen. Und dann abbricht und das bis dahin errechnete Ergebnis zurückgibt. Und das ist dann eben 1 bei "1.#INF" (Abbruch nach "1.").