104 105 106 #define one q[0] 107 #define pp1 q[1] 108 #define pp2 q[2] 109 #define pp3 q[3] 110 #define qq1 q[4] 111 #define qq2 q[5] 112 #define t1 q[6] 113 #define t2 q[7] 114 #define t3 q[8] 115 #define t4 q[9] 116 #define t5 q[10] 117 #define t6 q[11] 118 119 /* INDENT ON */ 120 121 122 double 123 __k_tan(double x, double y, int k) { 124 double a, t, z, w, s, c, r, rh, xh, xl; 125 int i, j, hx, ix; 126 127 t = one; 128 hx = ((int *) &x)[HIWORD]; 129 ix = hx & 0x7fffffff; 130 if (ix < 0x3fc40000) { 131 if (ix < 0x3e400000) { 132 if ((i = (int) x) == 0) /* generate inexact */ 133 w = x; 134 t = y; 135 } else { 136 z = x * x; 137 t = y + (((t1 * x) * z) * (t2 + z * (t3 + z))) * 138 ((t4 + z) * (t5 + z * (t6 + z))); 139 w = x + t; 140 } 141 if (k == 0) 142 return (w); 143 /* 144 * Compute -1/(x+T) with great care 145 * Let r = -1/(x+T), rh = r chopped to 20 bits. 146 * Also let xh = x+T chopped to 20 bits, xl = (x-xh)+T. Then 147 * -1/(x+T) = rh + (-1/(x+T)-rh) = rh + r*(1+rh*(x+T)) 148 * = rh + r*((1+rh*xh)+rh*xl). 149 */ 150 rh = r = -one / w; 151 ((int *) &rh)[LOWORD] = 0; | 104 105 106 #define one q[0] 107 #define pp1 q[1] 108 #define pp2 q[2] 109 #define pp3 q[3] 110 #define qq1 q[4] 111 #define qq2 q[5] 112 #define t1 q[6] 113 #define t2 q[7] 114 #define t3 q[8] 115 #define t4 q[9] 116 #define t5 q[10] 117 #define t6 q[11] 118 119 /* INDENT ON */ 120 121 122 double 123 __k_tan(double x, double y, int k) { 124 double a, t, z, w = 0.0L, s, c, r, rh, xh, xl; 125 int i, j, hx, ix; 126 127 t = one; 128 hx = ((int *) &x)[HIWORD]; 129 ix = hx & 0x7fffffff; 130 if (ix < 0x3fc40000) { /* 0.15625 */ 131 if (ix < 0x3e400000) { /* 2^-27 */ 132 if ((i = (int) x) == 0) /* generate inexact */ 133 w = x; 134 t = y; 135 } else { 136 z = x * x; 137 t = y + (((t1 * x) * z) * (t2 + z * (t3 + z))) * 138 ((t4 + z) * (t5 + z * (t6 + z))); 139 w = x + t; 140 } 141 if (k == 0) 142 return (w); 143 /* 144 * Compute -1/(x+T) with great care 145 * Let r = -1/(x+T), rh = r chopped to 20 bits. 146 * Also let xh = x+T chopped to 20 bits, xl = (x-xh)+T. Then 147 * -1/(x+T) = rh + (-1/(x+T)-rh) = rh + r*(1+rh*(x+T)) 148 * = rh + r*((1+rh*xh)+rh*xl). 149 */ 150 rh = r = -one / w; 151 ((int *) &rh)[LOWORD] = 0; |