ref: 660f5daac34386db8a6fdfffbb65b26be4a602b0
dir: /src/asm/math.c/
/* * RGBAsm - MATH.C (Fixedpoint math routines) * * INCLUDES * */ #include <math.h> #include <stdio.h> #include "types.h" #include "mymath.h" #include "symbol.h" #define fix2double(i) ((double)(i/65536.0)) #define double2fix(d) ((SLONG)(d*65536.0)) #ifndef PI #define PI (acos(-1)) #endif /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Define the _PI symbol * */ void math_DefinePI (void) { sym_AddEqu ("_PI", double2fix (PI)); } /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Print a fixed point value * */ void math_Print (SLONG i) { if (i >= 0) printf ("%ld.%05ld", i >> 16, ((SLONG) (fix2double (i) * 100000 + 0.5)) % 100000); else printf ("-%ld.%05ld", (-i) >> 16, ((SLONG) (fix2double (-i) * 100000 + 0.5)) % 100000); } /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Calculate sine * */ SLONG math_Sin (SLONG i) { return (double2fix (sin (fix2double (i) * 2 * PI / 65536))); } /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Calculate cosine * */ SLONG math_Cos (SLONG i) { return (double2fix (cos (fix2double (i) * 2 * PI / 65536))); } /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Calculate tangent * */ SLONG math_Tan (SLONG i) { return (double2fix (tan (fix2double (i) * 2 * PI / 65536))); } /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Calculate sine^-1 * */ SLONG math_ASin (SLONG i) { return (double2fix (asin (fix2double (i)) / 2 / PI * 65536)); } /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Calculate cosine^-1 * */ SLONG math_ACos (SLONG i) { return (double2fix (acos (fix2double (i)) / 2 / PI * 65536)); } /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Calculate tangent^-1 * */ SLONG math_ATan (SLONG i) { return (double2fix (atan (fix2double (i)) / 2 / PI * 65536)); } /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Calculate atan2 * */ SLONG math_ATan2 (SLONG i, SLONG j) { return (double2fix (atan2 (fix2double (i), fix2double (j)) / 2 / PI * 65536)); } /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Multiplication * */ SLONG math_Mul (SLONG i, SLONG j) { return (double2fix (fix2double (i) * fix2double (j))); } /* * RGBAsm - MATH.C (Fixedpoint math routines) * * Division * */ SLONG math_Div (SLONG i, SLONG j) { return (double2fix (fix2double (i) / fix2double (j))); }