home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 6 / IOPROG_06.ISO / djgpp / djgpp2 / draycast.arj / FIXED.H < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-31  |  1.5 KB  |  47 lines

  1. /****************************************/
  2. /* libreria que trabaja con FIXED 16:16 */
  3. /****************************************/
  4. #include <limits.h>
  5.  
  6. typedef long fixed;
  7.  
  8. /* fixed point conversions */
  9. #define INT_TO_FIXED(i) ((i) << 16)
  10. #define FIXED_TO_INT(f) ((f) >> 16)
  11. #define FIXED_TO_FLOAT(f) (((double) (f)) / 65536.0)
  12. #define FLOAT_TO_FIXED(f) ((fixed) (f * 65536.0))
  13.  
  14. /* functions */
  15. #define FIXED_ABS(f) ((f) < 0 ? -(f) : (f))
  16. #define FIXED_TRUNC(f) ((f) & 0xffff0000)
  17. #define FIXED_SIGN(f) ((unsigned int) (f) >> 31)
  18. #define FIXED_PRODUCT_SIGN(f, g) ((unsigned int) ((f) ^ (g)) >> 31)
  19. #define FIXED_HALF(f) ((f) / 2)
  20. #define FIXED_DOUBLE(f) ((f) << 1)
  21.  
  22. /* perform integer scaling of a fixed point number */
  23. #define FIXED_SCALE(f, i) ((f) * (i))
  24.  
  25. /* fixed point constants */
  26. #define FIXED_ZERO     (INT_TO_FIXED(0))
  27. #define FIXED_ONE      (INT_TO_FIXED(1))
  28. #define FIXED_ONE_HALF (FIXED_HALF(FIXED_ONE))
  29. #define FIXED_PI       (FLOAT_TO_FIXED(3.14159265))
  30. #define FIXED_2PI      (FLOAT_TO_FIXED(6.28318531))
  31. #define FIX_2PI_ANGLE  (fixdiv(INT_TO_FIXED(360),FIXED_2PI))
  32. #define FIXED_90       (INT_TO_FIXED(90))
  33. #define FIXED_HALF_PI  (FLOAT_TO_FIXED(1.57079633))
  34. #define FIXED_RAD_ANG  (FLOAT_TO_FIXED(57.2957795))    
  35.  
  36. /* we need this for kludges to avoid fixed point division overflow */
  37. #define FIXED_EPSILON  ((fixed) 0x100)
  38.  
  39.  
  40.  
  41. #define MIN(a, b) ((a) < (b) ? (a) : (b))
  42. #define MAX(a, b) ((a) > (b) ? (a) : (b))
  43.  
  44.  
  45. fixed fixdiv(fixed numerador,fixed denominador);
  46. fixed fixmul(fixed,fixed);
  47.