Print this page




  59 #define S0      C[0]
  60 #define S1      C[1]
  61 #define S2      C[2]
  62 #define S3      C[3]
  63 #define C0      C[4]
  64 #define C1      C[5]
  65 #define C2      C[6]
  66 #define C3      C[7]
  67 #define C4      C[8]
  68 #define invpio2 C[9]
  69 #define half    C[10]
  70 #define pio2_1  C[11]
  71 #define pio2_t  C[12]
  72 
  73 float
  74 sinf(float x)
  75 {
  76         double  y, z, w;
  77         float   f;
  78         int     n, ix, hx, hy;

  79 
  80         hx = *((int *)&x);
  81         ix = hx & 0x7fffffff;
  82 
  83         y = (double)x;
  84 
  85         if (ix <= 0x4016cbe4) {              /* |x| < 3*pi/4 */
  86                 if (ix <= 0x3f490fdb) {              /* |x| < pi/4 */
  87                         if (ix <= 0x39800000) {      /* |x| <= 2**-12 */
  88                                 volatile int    i = (int)y;
  89 #ifdef lint
  90                                 i = i;
  91 #endif
  92                                 return (x);
  93                         }
  94                         z = y * y;
  95                         return ((float)((y * (S0 + z * S1)) *
  96                             (S2 + z * (S3 + z))));
  97                 } else if (hx > 0) {
  98                         y = (y - pio2_1) - pio2_t;
  99                         z = y * y;
 100                         return ((float)(((C0 + z * C1) + (z * z) * C2) *
 101                             (C3 + z * (C4 + z))));
 102                 } else {
 103                         y = (y + pio2_1) + pio2_t;
 104                         z = y * y;
 105                         return ((float)-(((C0 + z * C1) + (z * z) * C2) *
 106                             (C3 + z * (C4 + z))));
 107                 }
 108         } else if (ix <= 0x49c90fdb) {       /* |x| < 2^19*pi */




  59 #define S0      C[0]
  60 #define S1      C[1]
  61 #define S2      C[2]
  62 #define S3      C[3]
  63 #define C0      C[4]
  64 #define C1      C[5]
  65 #define C2      C[6]
  66 #define C3      C[7]
  67 #define C4      C[8]
  68 #define invpio2 C[9]
  69 #define half    C[10]
  70 #define pio2_1  C[11]
  71 #define pio2_t  C[12]
  72 
  73 float
  74 sinf(float x)
  75 {
  76         double  y, z, w;
  77         float   f;
  78         int     n, ix, hx, hy;
  79         volatile int i;
  80 
  81         hx = *((int *)&x);
  82         ix = hx & 0x7fffffff;
  83 
  84         y = (double)x;
  85 
  86         if (ix <= 0x4016cbe4) {              /* |x| < 3*pi/4 */
  87                 if (ix <= 0x3f490fdb) {              /* |x| < pi/4 */
  88                         if (ix <= 0x39800000) {      /* |x| <= 2**-12 */
  89                                 i = (int)y;
  90 #ifdef lint
  91                                 i = i;
  92 #endif
  93                                 return (x);
  94                         }
  95                         z = y * y;
  96                         return ((float)((y * (S0 + z * S1)) *
  97                             (S2 + z * (S3 + z))));
  98                 } else if (hx > 0) {
  99                         y = (y - pio2_1) - pio2_t;
 100                         z = y * y;
 101                         return ((float)(((C0 + z * C1) + (z * z) * C2) *
 102                             (C3 + z * (C4 + z))));
 103                 } else {
 104                         y = (y + pio2_1) + pio2_t;
 105                         z = y * y;
 106                         return ((float)-(((C0 + z * C1) + (z * z) * C2) *
 107                             (C3 + z * (C4 + z))));
 108                 }
 109         } else if (ix <= 0x49c90fdb) {       /* |x| < 2^19*pi */