fp_private.h 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. typedef struct /* Hex representation of a double. */
  57. {
  58. #if defined(__BIG_ENDIAN__)
  59. uint32_t high;
  60. uint32_t low;
  61. #else
  62. uint32_t low;
  63. uint32_t high;
  64. #endif
  65. } dHexParts;
  66. typedef union
  67. {
  68. unsigned char byties[8];
  69. double dbl;
  70. } DblInHex;