home *** CD-ROM | disk | FTP | other *** search
- /****************************************/
- /* libreria que trabaja con FIXED 16:16 */
- /****************************************/
- #include <limits.h>
-
- typedef long fixed;
-
- /* fixed point conversions */
- #define INT_TO_FIXED(i) ((i) << 16)
- #define FIXED_TO_INT(f) ((f) >> 16)
- #define FIXED_TO_FLOAT(f) (((double) (f)) / 65536.0)
- #define FLOAT_TO_FIXED(f) ((fixed) (f * 65536.0))
-
- /* functions */
- #define FIXED_ABS(f) ((f) < 0 ? -(f) : (f))
- #define FIXED_TRUNC(f) ((f) & 0xffff0000)
- #define FIXED_SIGN(f) ((unsigned int) (f) >> 31)
- #define FIXED_PRODUCT_SIGN(f, g) ((unsigned int) ((f) ^ (g)) >> 31)
- #define FIXED_HALF(f) ((f) / 2)
- #define FIXED_DOUBLE(f) ((f) << 1)
-
- /* perform integer scaling of a fixed point number */
- #define FIXED_SCALE(f, i) ((f) * (i))
-
- /* fixed point constants */
- #define FIXED_ZERO (INT_TO_FIXED(0))
- #define FIXED_ONE (INT_TO_FIXED(1))
- #define FIXED_ONE_HALF (FIXED_HALF(FIXED_ONE))
- #define FIXED_PI (FLOAT_TO_FIXED(3.14159265))
- #define FIXED_2PI (FLOAT_TO_FIXED(6.28318531))
- #define FIX_2PI_ANGLE (fixdiv(INT_TO_FIXED(360),FIXED_2PI))
- #define FIXED_90 (INT_TO_FIXED(90))
- #define FIXED_HALF_PI (FLOAT_TO_FIXED(1.57079633))
- #define FIXED_RAD_ANG (FLOAT_TO_FIXED(57.2957795))
-
- /* we need this for kludges to avoid fixed point division overflow */
- #define FIXED_EPSILON ((fixed) 0x100)
-
-
-
- #define MIN(a, b) ((a) < (b) ? (a) : (b))
- #define MAX(a, b) ((a) > (b) ? (a) : (b))
-
-
- fixed fixdiv(fixed numerador,fixed denominador);
- fixed fixmul(fixed,fixed);
-