28float fasin_deg(
float x)
31 if (x >= 1.0F)
return 90.0F;
32 if (x <= -1.0F)
return -90.0F;
36 return (fatan_deg(x / sqrtf(1.0F - x * x)));
43float facos_deg(
float x)
46 if (x >= 1.0F)
return 0.0F;
47 if (x <= -1.0F)
return 180.0F;
51 if (x == 0.0F)
return 90.0F;
52 if (x > 0.0F)
return fatan_deg((sqrtf(1.0F - x * x) / x));
53 return 180.0F + fatan_deg((sqrtf(1.0F - x * x) / x));
59float fatan_deg(
float x)
65#define TAN15DEG 0.26794919243F
66#define TAN30DEG 0.57735026919F
68 ixisnegative = ixexceeds1 = ixmapped = 0;
91 x = (x - TAN30DEG) / (1.0F + TAN30DEG * x);
96 fangledeg = fatan_15deg(x);
99 if (ixmapped) fangledeg += 30.0F;
100 if (ixexceeds1) fangledeg = 90.0F - fangledeg;
101 if (ixisnegative) fangledeg = -fangledeg;
109float fatan2_deg(
float y,
float x)
115 if (y > 0.0F)
return 90.0F;
118 if (y < 0.0F)
return -90.0F;
126 if (x > 0.0F)
return (fatan_deg(y / x));
129 if ((x < 0.0F) && (y > 0.0F))
return (180.0F + fatan_deg(y / x));
132 return (-180.0F + fatan_deg(y / x));
139float fatan_15deg(
float x)
142#define PADE_A 96.644395816F
143#define PADE_B 25.086941612F
144#define PADE_C 1.6867633134F
148 return (x * (PADE_A + x2 * PADE_B) / (PADE_C + x2));
Math approximations file.