1: /*	@(#)tan.c	4.1	12/25/82	*/
   2: 
   3: /*
   4: 	floating point tangent
   5: 
   6: 	A series is used after range reduction.
   7: 	Coefficients are #4285 from Hart & Cheney. (19.74D)
   8: */
   9: 
  10: #include <errno.h>
  11: #include <math.h>
  12: 
  13: int errno;
  14: static double invpi   = 1.27323954473516268;
  15: static double p0     = -0.1306820264754825668269611177e+5;
  16: static double p1      = 0.1055970901714953193602353981e+4;
  17: static double p2     = -0.1550685653483266376941705728e+2;
  18: static double p3      = 0.3422554387241003435328470489e-1;
  19: static double p4      = 0.3386638642677172096076369e-4;
  20: static double q0     = -0.1663895238947119001851464661e+5;
  21: static double q1      = 0.4765751362916483698926655581e+4;
  22: static double q2     = -0.1555033164031709966900124574e+3;
  23: 
  24: double
  25: tan(arg)
  26: double arg;
  27: {
  28:     double modf();
  29:     double sign, temp, e, x, xsq;
  30:     int flag, i;
  31: 
  32:     flag = 0;
  33:     sign = 1.;
  34:     if(arg < 0.){
  35:         arg = -arg;
  36:         sign = -1.;
  37:     }
  38:     arg = arg*invpi;   /*overflow?*/
  39:     x = modf(arg,&e);
  40:     i = e;
  41:     switch(i%4) {
  42:     case 1:
  43:         x = 1. - x;
  44:         flag = 1;
  45:         break;
  46: 
  47:     case 2:
  48:         sign = - sign;
  49:         flag = 1;
  50:         break;
  51: 
  52:     case 3:
  53:         x = 1. - x;
  54:         sign = - sign;
  55:         break;
  56: 
  57:     case 0:
  58:         break;
  59:     }
  60: 
  61:     xsq = x*x;
  62:     temp = ((((p4*xsq+p3)*xsq+p2)*xsq+p1)*xsq+p0)*x;
  63:     temp = temp/(((1.0*xsq+q2)*xsq+q1)*xsq+q0);
  64: 
  65:     if(flag == 1) {
  66:         if(temp == 0.) {
  67:             errno = ERANGE;
  68:             if (sign>0)
  69:                 return(HUGE);
  70:             return(-HUGE);
  71:         }
  72:         temp = 1./temp;
  73:     }
  74:     return(sign*temp);
  75: }

Defined functions

Defined variables

errno defined in line 13; used 1 times
  • in line 67
invpi defined in line 14; used 1 times
  • in line 38
p0 defined in line 15; used 1 times
  • in line 62
p1 defined in line 16; used 1 times
  • in line 62
p2 defined in line 17; used 1 times
  • in line 62
p3 defined in line 18; used 1 times
  • in line 62
p4 defined in line 19; used 1 times
  • in line 62
q0 defined in line 20; used 1 times
  • in line 63
q1 defined in line 21; used 1 times
  • in line 63
q2 defined in line 22; used 1 times
  • in line 63
Last modified: 1985-06-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1246
Valid CSS Valid XHTML 1.0 Strict