|
|
1.1 ! root 1: /* ! 2: * libm/tan.c ! 3: * Evaluate the tangent function. ! 4: * (Hart 4245, 17.08) ! 5: */ ! 6: ! 7: #include <math.h> ! 8: ! 9: #if EMU87 ! 10: #include "emumath.h" ! 11: #endif ! 12: ! 13: static readonly double tanntab[] ={ ! 14: -0.16045331195592187943926861e+05, ! 15: 0.12697548376580828837860720e+04, ! 16: -0.17135185514886110932101000e+02, ! 17: 0.28208772971655103151400000e-01 ! 18: }; ! 19: static readonly double tanmtab[] ={ ! 20: -0.20429550186600697853114142e+05, ! 21: 0.58173599554655686739034190e+04, ! 22: -0.18149310354089045993457500e+03, ! 23: 0.10000000000000000000000000e+01 ! 24: }; ! 25: ! 26: double ! 27: tan(x) double x; ! 28: { ! 29: double r; ! 30: register int i, s; ! 31: ! 32: if ((x = modf(x/(2.0*PI), &r)) < 0.0) { ! 33: x += 1.0; ! 34: r -= 1.0; ! 35: } ! 36: i = 0; ! 37: s = 0; ! 38: if (x > 0.5) ! 39: x -= 0.5; ! 40: if (x > 0.25) { ! 41: s = 1; ! 42: x = 0.5 - x; ! 43: } ! 44: if (x > 0.125) { ! 45: i = 1; ! 46: x = 0.25 - x; ! 47: } ! 48: x *= 8.0; ! 49: r = x * x; ! 50: r = x * (_pol(r, tanntab, 4)/_pol(r, tanmtab, 4)); ! 51: if (i) { ! 52: if (r < 1.0/HUGE_VAL) { ! 53: errno = ERANGE; ! 54: return HUGE_VAL; ! 55: } ! 56: r = 1/r; ! 57: } ! 58: return s ? -r : r; ! 59: } ! 60: ! 61: /* end of libm/tan.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.