FLOAT.DEF 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * FLOAT.DEF - Modula-2 interface to FLOAT.H *
  5. * *
  6. * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. (*# project("#set tsc='on'") *)
  11. (*# call(o_a_size=>off, o_a_copy=>off, c_conv=>on, result_optional=>on) *)
  12. (*# module(implementation=>off, init_code=>off) *)
  13. (*# name(prefix=>c) *)
  14. DEFINITION MODULE float;
  15. CONST
  16. DBL_DIG = 15; (* number of decimal digits of precision *)
  17. DBL_MANT_DIG = 53; (* number of bits in mantissa *)
  18. DBL_MAX_10_EXP = 308; (* maximum decimal exponent *)
  19. DBL_MAX_EXP = 1024; (* maximum binary exponent *)
  20. DBL_MIN_10_EXP = -307; (* minimum decimal exponent *)
  21. DBL_MIN_EXP = -1021; (* minimum binary exponent *)
  22. DBL_RADIX = 2; (* exponent radix *)
  23. DBL_ROUNDS = 1; (* addition rounding *)
  24. DBL_EPSILON = 2.2204460492503131E-016; (* 1.0+DBL_EPSILON != 1.0 *)
  25. DBL_MAX = 1.7976931348623151E+308; (* maximum value *)
  26. DBL_MIN = 2.2250738585072014E-308; (* minimum positive value *)
  27. FLT_DIG = 6; (* number of decimal digits of precision *)
  28. FLT_GUARD = 0;
  29. FLT_MANT_DIG = 24; (* number of bits in mantissa *)
  30. FLT_MAX_10_EXP = 38; (* maximum decimal exponent *)
  31. FLT_MAX_EXP = 128; (* maximum binary exponent *)
  32. FLT_MIN_10_EXP = -37; (* minimum decimal exponent *)
  33. FLT_MIN_EXP = -125; (* minimum binary exponent *)
  34. FLT_NORMALIZE = 0;
  35. FLT_RADIX = 2; (* exponent radix *)
  36. FLT_ROUNDS = 1; (* addition rounding chops *)
  37. FLT_EPSILON = 1.192092896E-07; (* smallest such that 1.0+FLT_EPSILON != 1.0 *)
  38. FLT_MAX = 3.402823466E+38; (* maximum value *)
  39. FLT_MIN = 1.175494351E-38; (* minimum positive value *)
  40. LDBL_DIG = DBL_DIG; (* number of decimal digits of precision *)
  41. LDBL_EPSILON = DBL_EPSILON; (* smallest such that 1.0+LDBL_EPSILON != 1.0 *)
  42. LDBL_MANT_DIG = DBL_MANT_DIG; (* number of bits in mantissa *)
  43. LDBL_MAX = DBL_MAX; (* maximum value *)
  44. LDBL_MAX_10_EXP = DBL_MAX_10_EXP; (* maximum decimal exponent *)
  45. LDBL_MAX_EXP = DBL_MAX_EXP; (* maximum binary exponent *)
  46. LDBL_MIN = DBL_MIN; (* minimum positive value *)
  47. LDBL_MIN_10_EXP = DBL_MIN_10_EXP; (* minimum deimal exponent *)
  48. LDBL_MIN_EXP = DBL_MIN_EXP; (* minimum binary exponent *)
  49. LDBL_RADIX = DBL_RADIX; (* exponent radix *)
  50. LDBL_ROUNDS = DBL_ROUNDS; (* addition rounding *)
  51. (* X087 math control information *)
  52. (* Control Word Mask and bit definitions *)
  53. MCW_EM = 003FH; (* interrupt Exception Masks *)
  54. EM_INVALID = 0001H; (* invalid *)
  55. EM_DENORMAL = 0002H; (* denormal *)
  56. EM_ZERODIVIDE = 0004H; (* zero divide *)
  57. EM_OVERFLOW = 0008H; (* overflow *)
  58. EM_UNDERFLOW = 0010H; (* underflow *)
  59. EM_INEXACT = 0020H; (* inexact *)
  60. MCW_IC = 1000H; (* Infinity Control *)
  61. IC_AFFINE = 1000H; (* affine *)
  62. IC_PROJECTIVE = 0000H; (* projective *)
  63. MCW_RC = 0C00H; (* Rounding Control *)
  64. RC_CHOP = 0C00H; (* chop *)
  65. RC_UP = 0800H; (* up *)
  66. RC_DOWN = 0400H; (* down *)
  67. RC_NEAR = 0000H; (* near *)
  68. MCW_PC = 0300H; (* Precision Control *)
  69. PC_24 = 0000H; (* 24 bits *)
  70. PC_53 = 0200H; (* 53 bits *)
  71. PC_64 = 0300H; (* 64 bits *)
  72. (* Initial Control Word value *)
  73. CW_DEFAULT = (IC_AFFINE+RC_NEAR+PC_64+EM_DENORMAL+EM_UNDERFLOW+EM_INEXACT);
  74. (* user Status Word bit definitions *)
  75. SW_INVALID = 0001H; (* invalid *)
  76. SW_DENORMAL = 0002H; (* denormal *)
  77. SW_ZERODIVIDE = 0004H; (* zero divide *)
  78. SW_OVERFLOW = 0008H; (* overflow *)
  79. SW_UNDERFLOW = 0010H; (* underflow *)
  80. SW_INEXACT = 0020H; (* precision inexact *)
  81. PROCEDURE _clear87():CARDINAL;
  82. PROCEDURE _control87():CARDINAL;
  83. PROCEDURE _fpreset;
  84. PROCEDURE _status87():CARDINAL;
  85. END float.