tw39357.pp 691 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. { %OPT=-O- -O2 }
  2. function get_sign(d: double): Integer;
  3. var
  4. p: pbyte;
  5. begin
  6. get_sign:=1;
  7. p:=pbyte(@d);
  8. {$ifdef FPUARM_HAS_FPA}
  9. inc(p,4);
  10. {$else}
  11. {$ifdef FPC_LITTLE_ENDIAN}
  12. inc(p,sizeof(d)-1);
  13. {$endif}
  14. {$endif}
  15. if (p^ and $80)<>0 then
  16. get_sign:=-1;
  17. end;
  18. const
  19. NegInfinity: single = -1.0 / 0.0;
  20. var
  21. zero : Double;
  22. begin
  23. zero:=0.0;
  24. if get_sign(1.0)<>1 then
  25. halt(1);
  26. writeln(-zero);
  27. if get_sign(-zero)<>-1 then
  28. halt(1);
  29. writeln(1.0 / (-1.0 / 0.0));
  30. if get_sign(1.0 / (-1.0 / 0.0))<>-1 then
  31. halt(1);
  32. writeln(1.0 / NegInfinity);
  33. if get_sign(1.0 / NegInfinity)<>-1 then
  34. halt(1);
  35. writeln('ok');
  36. end.