t2ex/bsd_source/lib/libc/src_bsd/math/k_sinf.c | bare source | permlink (0.01 seconds) |
1: /* k_sinf.c -- float version of k_sin.c 2: * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. 3: */ 4: 5: /* 6: * ==================================================== 7: * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 8: * 9: * Developed at SunPro, a Sun Microsystems, Inc. business. 10: * Permission to use, copy, modify, and distribute this 11: * software is freely granted, provided that this notice 12: * is preserved. 13: * ==================================================== 14: */ 15: 16: #include "math.h" 17: #include "math_private.h" 18: 19: static const float 20: half = 5.0000000000e-01,/* 0x3f000000 */ 21: S1 = -1.6666667163e-01, /* 0xbe2aaaab */ 22: S2 = 8.3333337680e-03, /* 0x3c088889 */ 23: S3 = -1.9841270114e-04, /* 0xb9500d01 */ 24: S4 = 2.7557314297e-06, /* 0x3638ef1b */ 25: S5 = -2.5050759689e-08, /* 0xb2d72f34 */ 26: S6 = 1.5896910177e-10; /* 0x2f2ec9d3 */ 27: 28: float 29: __kernel_sinf(float x, float y, int iy) 30: { 31: float z,r,v; 32: int32_t ix; 33: GET_FLOAT_WORD(ix,x); 34: ix &= 0x7fffffff; /* high word of x */ 35: if(ix<0x32000000) /* |x| < 2**-27 */ 36: {if((int)x==0) return x;} /* generate inexact */ 37: z = x*x; 38: v = z*x; 39: r = S2+z*(S3+z*(S4+z*(S5+z*S6))); 40: if(iy==0) return x+v*(S1+z*r); 41: else return x-((z*(half*y-v*r)-y)-v*S1); 42: }