fp_private.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*******************************************************************************
  2. * *
  3. * File fp_private.h, *
  4. * All pack 4 dependencies for the MathLib elems plus some defines used *
  5. * throughout MathLib. *
  6. * *
  7. * Copyright © 1991 Apple Computer, Inc. All rights reserved. *
  8. * *
  9. * Written by Ali Sazegari, started on October 1991, *
  10. * *
  11. * W A R N I N G: This routine expects a 64 bit double model. *
  12. * *
  13. *******************************************************************************/
  14. #define NoException 0
  15. /*******************************************************************************
  16. * Values of constants. *
  17. *******************************************************************************/
  18. //#define SgnMask 0x8000
  19. #define dSgnMask 0x80000000
  20. #define sSgnMask 0x7FFFFFFF
  21. //#define ExpMask 0x7FFF
  22. #define dExpMask 0x7FF00000
  23. #define sExpMask 0xFF000000
  24. /* according to rounding BIG & SMALL are: */
  25. #define BIG 1.1e+300 /* used to deliver ±° or largest number, */
  26. #define SMALL 1.1e-300 /* used to deliver ±0 or smallest number. */
  27. #define InfExp 0x7FF
  28. #define dMaxExp 0x7FF00000
  29. #define MaxExpP1 1024
  30. #define MaxExp 1023
  31. #define DenormLimit -52
  32. //#define ManMask 0x80000000
  33. #define dManMask 0x00080000
  34. //#define IsItDenorm 0x80000000
  35. #define dIsItDenorm 0x00080000
  36. //#define xIsItSNaN 0x40000000
  37. #define dIsItSNaN 0x00080000
  38. #define dHighMan 0x000FFFFF
  39. #define dFirstBitSet 0x00080000
  40. #define BIAS 0x3FF
  41. //#define GetSign 0x8000
  42. #define dGetSign 0x80000000
  43. #define sGetSign 0x80000000
  44. //#define Infinity(x) ( x.hex.exponent & ExpMask ) == ExpMask
  45. #define dInfinity(x) ( x.hex.high & dExpMask ) == dExpMask
  46. #define sInfinity(x) ( ( x.hexsgl << 1 ) & sExpMask ) == sExpMask
  47. //#define Exponent(x) x.hex.exponent & ExpMask
  48. #define dExponent(x) x.hex.high & dExpMask
  49. #define sExponent(x) ( ( x.hexsgl << 1 ) & sExpMask )
  50. #define sZero(x) ( x.hexsgl & sSgnMask ) == 0
  51. //#define Sign(x) ( x.hex.exponent & SgnMask ) == SgnMask
  52. /*******************************************************************************
  53. * Types used in the auxiliary functions. *
  54. *******************************************************************************/
  55. #include <stdint.h>
  56. #include <endian.h>
  57. typedef struct /* Hex representation of a double. */
  58. {
  59. #if (__BYTE_ORDER == __BIG_ENDIAN)
  60. uint32_t high;
  61. uint32_t low;
  62. #else
  63. uint32_t low;
  64. uint32_t high;
  65. #endif
  66. } dHexParts;
  67. typedef union
  68. {
  69. unsigned char byties[8];
  70. double dbl;
  71. } DblInHex;