Einzelnen Beitrag anzeigen

v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
571 Beiträge
 
Delphi XE2 Professional
 
#1

Arbeiten mit Nan

  Alt 8. Jan 2021, 14:21
Ich habe hier ein mit Delphi 2006 erstelltes Projenkt. Da bekomme ich über eine Schnittstelle einen Datenstrom und wandle diesen Wert in eine Floatzahl um. Jetzt kam ein Hardwareker darauf mir unter Umständen ein Nan zu senden. Dabei knallt es jetzt bei mir. Ich habe das mal auf folgende Funktion runtergebrochen
Delphi-Quellcode:
function HexAsciiStr2Float(str: Cardinal): Extended;
var
  n: Integer;
  p: ^byte;
  p2: ^byte;
  s: single;
begin
  s := 0;
  p := @s;
  p2 := @str;

  for n := 1 to 4 do
  begin
    p^ := p2^;
    inc(p, 1);
    inc(p2, 1);
  end;
  result := s;//Hier steht im debugger s='nan'
end;
procedure TForm1.Button1Click(Sender: TObject);
var Nan2:Cardinal;

begin
   NaN2:=$FFBFFFFF;
   HexAsciiStr2Float(Nan2);
end;
er durchläuft die HexAsciiStr2Float und hat auch in s bzw. in Result NAN drinstehen. Wenn das Programm dann allerdings zu Button1click zurückspringt kommt eine Fehlermeldung illegale Gleitkommaoperation. Warum ? Wie kann ich das abfangen. Laut Hardware gibt es bei Ihnen folgende NANS:
Quiet NANs (+): 7FC00000 - 7FFFFFFF
Quiet NANs (-): FFC00001 - FFFFFFFF

Signalling NANs (+): 7F800001 - 7FBFFFFF
Signalling NANs (-): FF800001 - FFBFFFFF

Da bin ich jetzt echt überfragt. Kann mir jemand helfen ?
  Mit Zitat antworten Zitat