1d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol/* ef_rem_pio2.c -- float version of e_rem_pio2.c 2d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. 3d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol */ 4d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol 5d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol/* 6d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * ==================================================== 7d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 8d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * 9d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * Developed at SunPro, a Sun Microsystems, Inc. business. 10d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * Permission to use, copy, modify, and distribute this 11d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * software is freely granted, provided that this notice 12d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * is preserved. 13d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * ==================================================== 14d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * 15d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol */ 16d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol 17d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol/* __ieee754_rem_pio2f(x,y) 18d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * 19d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * return the remainder of x rem pi/2 in y[0]+y[1] 20d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * use __kernel_rem_pio2f() 21d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol */ 22d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol 23d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#include "fdlibm.h" 24d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol 25d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol/* 26d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi 27d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol */ 28d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#ifdef __STDC__ 29d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolstatic const __int32_t two_over_pi[] = { 30d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#else 31d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolstatic __int32_t two_over_pi[] = { 32d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#endif 33d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0xA2, 0xF9, 0x83, 0x6E, 0x4E, 0x44, 0x15, 0x29, 0xFC, 34d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x27, 0x57, 0xD1, 0xF5, 0x34, 0xDD, 0xC0, 0xDB, 0x62, 35d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x95, 0x99, 0x3C, 0x43, 0x90, 0x41, 0xFE, 0x51, 0x63, 36d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0xAB, 0xDE, 0xBB, 0xC5, 0x61, 0xB7, 0x24, 0x6E, 0x3A, 37d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x42, 0x4D, 0xD2, 0xE0, 0x06, 0x49, 0x2E, 0xEA, 0x09, 38d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0xD1, 0x92, 0x1C, 0xFE, 0x1D, 0xEB, 0x1C, 0xB1, 0x29, 39d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0xA7, 0x3E, 0xE8, 0x82, 0x35, 0xF5, 0x2E, 0xBB, 0x44, 40d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x84, 0xE9, 0x9C, 0x70, 0x26, 0xB4, 0x5F, 0x7E, 0x41, 41d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x39, 0x91, 0xD6, 0x39, 0x83, 0x53, 0x39, 0xF4, 0x9C, 42d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x84, 0x5F, 0x8B, 0xBD, 0xF9, 0x28, 0x3B, 0x1F, 0xF8, 43d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x97, 0xFF, 0xDE, 0x05, 0x98, 0x0F, 0xEF, 0x2F, 0x11, 44d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x8B, 0x5A, 0x0A, 0x6D, 0x1F, 0x6D, 0x36, 0x7E, 0xCF, 45d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x27, 0xCB, 0x09, 0xB7, 0x4F, 0x46, 0x3F, 0x66, 0x9E, 46d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x5F, 0xEA, 0x2D, 0x75, 0x27, 0xBA, 0xC7, 0xEB, 0xE5, 47d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0xF1, 0x7B, 0x3D, 0x07, 0x39, 0xF7, 0x8A, 0x52, 0x92, 48d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0xEA, 0x6B, 0xFB, 0x5F, 0xB1, 0x1F, 0x8D, 0x5D, 0x08, 49d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x56, 0x03, 0x30, 0x46, 0xFC, 0x7B, 0x6B, 0xAB, 0xF0, 50d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0xCF, 0xBC, 0x20, 0x9A, 0xF4, 0x36, 0x1D, 0xA9, 0xE3, 51d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x91, 0x61, 0x5E, 0xE6, 0x1B, 0x08, 0x65, 0x99, 0x85, 52d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x5F, 0x14, 0xA0, 0x68, 0x40, 0x8D, 0xFF, 0xD8, 0x80, 53d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x4D, 0x73, 0x27, 0x31, 0x06, 0x06, 0x15, 0x56, 0xCA, 54d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x73, 0xA8, 0xC9, 0x60, 0xE2, 0x7B, 0xC0, 0x8C, 0x6B, 55d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol}; 56d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol 57d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol/* This array is like the one in e_rem_pio2.c, but the numbers are 58d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol single precision and the last 8 bits are forced to 0. */ 59d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#ifdef __STDC__ 60d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolstatic const __int32_t npio2_hw[] = { 61d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#else 62d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolstatic __int32_t npio2_hw[] = { 63d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#endif 64d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00, 65d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00, 66d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100, 67d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00, 68d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00, 69d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol0x4242c700, 0x42490f00 70d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol}; 71d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol 72d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol/* 73d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * invpio2: 24 bits of 2/pi 74d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * pio2_1: first 17 bit of pi/2 75d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * pio2_1t: pi/2 - pio2_1 76d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * pio2_2: second 17 bit of pi/2 77d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * pio2_2t: pi/2 - (pio2_1+pio2_2) 78d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * pio2_3: third 17 bit of pi/2 79d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) 80d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol */ 81d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol 82d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#ifdef __STDC__ 83d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolstatic const float 84d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#else 85d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolstatic float 86d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#endif 87d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolzero = 0.0000000000e+00, /* 0x00000000 */ 88d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolhalf = 5.0000000000e-01, /* 0x3f000000 */ 89d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignoltwo8 = 2.5600000000e+02, /* 0x43800000 */ 90d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolinvpio2 = 6.3661980629e-01, /* 0x3f22f984 */ 91d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolpio2_1 = 1.5707855225e+00, /* 0x3fc90f80 */ 92d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolpio2_1t = 1.0804334124e-05, /* 0x37354443 */ 93d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolpio2_2 = 1.0804273188e-05, /* 0x37354400 */ 94d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolpio2_2t = 6.0770999344e-11, /* 0x2e85a308 */ 95d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolpio2_3 = 6.0770943833e-11, /* 0x2e85a300 */ 96d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignolpio2_3t = 6.1232342629e-17; /* 0x248d3132 */ 97d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol 98d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#ifdef __STDC__ 99d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol __int32_t __ieee754_rem_pio2f(float x, float *y) 100d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#else 101d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol __int32_t __ieee754_rem_pio2f(x,y) 102d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol float x,y[]; 103d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol#endif 104d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol{ 105d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol float z,w,t,r,fn; 106d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol float tx[3]; 107d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol __int32_t i,j,n,ix,hx; 108d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol int e0,nx; 109d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol 110d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol GET_FLOAT_WORD(hx,x); 111d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol ix = hx&0x7fffffff; 112d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */ 113d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol {y[0] = x; y[1] = 0; return 0;} 114d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */ 115d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if(hx>0) { 116d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol z = x - pio2_1; 117d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */ 118d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[0] = z - pio2_1t; 119d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[1] = (z-y[0])-pio2_1t; 120d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } else { /* near pi/2, use 24+24+24 bit pi */ 121d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol z -= pio2_2; 122d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[0] = z - pio2_2t; 123d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[1] = (z-y[0])-pio2_2t; 124d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } 125d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol return 1; 126d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } else { /* negative x */ 127d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol z = x + pio2_1; 128d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */ 129d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[0] = z + pio2_1t; 130d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[1] = (z-y[0])+pio2_1t; 131d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } else { /* near pi/2, use 24+24+24 bit pi */ 132d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol z += pio2_2; 133d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[0] = z + pio2_2t; 134d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[1] = (z-y[0])+pio2_2t; 135d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } 136d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol return -1; 137d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } 138d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } 139d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if(ix<=0x43490f80) { /* |x| ~<= 2^7*(pi/2), medium size */ 140d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol t = fabsf(x); 141d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol n = (__int32_t) (t*invpio2+half); 142d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol fn = (float)n; 143d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol r = t-fn*pio2_1; 144d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol w = fn*pio2_1t; /* 1st round good to 40 bit */ 145d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if(n<32&&(ix&0xffffff00)!=npio2_hw[n-1]) { 146d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[0] = r-w; /* quick check no cancellation */ 147d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } else { 148d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol __uint32_t high; 149d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol j = ix>>23; 150d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[0] = r-w; 151d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol GET_FLOAT_WORD(high,y[0]); 152d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol i = j-((high>>23)&0xff); 153d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if(i>8) { /* 2nd iteration needed, good to 57 */ 154d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol t = r; 155d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol w = fn*pio2_2; 156d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol r = t-w; 157d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol w = fn*pio2_2t-((t-r)-w); 158d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[0] = r-w; 159d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol GET_FLOAT_WORD(high,y[0]); 160d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol i = j-((high>>23)&0xff); 161d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if(i>25) { /* 3rd iteration need, 74 bits acc */ 162d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol t = r; /* will cover all possible cases */ 163d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol w = fn*pio2_3; 164d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol r = t-w; 165d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol w = fn*pio2_3t-((t-r)-w); 166d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[0] = r-w; 167d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } 168d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } 169d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } 170d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[1] = (r-y[0])-w; 171d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} 172d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol else return n; 173d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } 174d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol /* 175d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol * all other (large) arguments 176d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol */ 177d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if(!FLT_UWORD_IS_FINITE(ix)) { 178d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol y[0]=y[1]=x-x; return 0; 179d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } 180d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol /* set z = scalbn(|x|,ilogb(x)-7) */ 181d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol e0 = (int)((ix>>23)-134); /* e0 = ilogb(z)-7; */ 182d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol SET_FLOAT_WORD(z, ix - ((__int32_t)e0<<23)); 183d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol for(i=0;i<2;i++) { 184d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol tx[i] = (float)((__int32_t)(z)); 185d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol z = (z-tx[i])*two8; 186d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol } 187d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol tx[2] = z; 188d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol nx = 3; 189d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol while(tx[nx-1]==zero) nx--; /* skip zero term */ 190d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol n = __kernel_rem_pio2f(tx,y,e0,nx,2,two_over_pi); 191d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} 192d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol return n; 193d61f9ebd0671c1066118199537cd6057ecbf8697Andrew Rossignol} 194