tmask.inc 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. begin
  2. f1:=1.0;
  3. f2:=0.0;
  4. caught := false;
  5. try
  6. writeln('dividing by zero without having disabled FPU Exceptions...');
  7. writeln(f1/f2);
  8. writeln('no exception was raised');
  9. except on E:Exception do
  10. begin
  11. writeln('Exception occurred: ',E.Message);
  12. caught := true;
  13. end;
  14. end;
  15. if not caught then
  16. halt(1);
  17. writeln('Masking exceptions');
  18. writeln(Integer(SetExceptionMask([exDenormalized,exInvalidOp,exOverflow,exPrecision,exUnderflow,exZeroDivide]))); //Returns 61, as expected
  19. writeln(integer(GetExceptionMask)); //Returns 4 - unexpected???
  20. writeln(byte([exZeroDivide])); //Returns 4
  21. caught := false;
  22. try
  23. writeln('dividing by zero with FPU Exceptions disabled...');
  24. writeln(f1/f2);
  25. writeln('no exception was raised');
  26. except on E:Exception do
  27. begin
  28. writeln('Exception occurred: ',E.Message);
  29. caught := true;
  30. end;
  31. end;
  32. if caught then
  33. halt(2);
  34. writeln(integer(SetExceptionMask([exDenormalized,exInvalidOp,exOverflow,exPrecision,exUnderflow]))); //Returns 61, as expected
  35. writeln(integer(GetExceptionMask)); //Returns 4 - unexpected???
  36. writeln(byte([exZeroDivide])); //Returns 4
  37. caught := false;
  38. try
  39. writeln('dividing by zero without having disabled FPU Exceptions...');
  40. writeln(f1/f2);
  41. writeln('no exception was raised');
  42. except on E:Exception do
  43. begin
  44. writeln('Exception occurred: ',E.Message);
  45. caught := true;
  46. end;
  47. end;
  48. if not caught then
  49. halt(2);
  50. writeln('ok');
  51. end.