1/* e_j1f.c -- float version of e_j1.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 <sys/cdefs.h> |
17__FBSDID("$FreeBSD: head/lib/msun/src/e_j1f.c 279493 2015-03-01 20:32:47Z kargl $"); |
18 19#include "math.h" 20#include "math_private.h" 21 22static float ponef(float), qonef(float); 23 24static const float 25huge = 1e30, --- 188 unchanged lines hidden (view full) --- 214static const float ps2[5] = { 215 2.1436485291e+01, /* 0x41ab7dec */ 216 1.2529022980e+02, /* 0x42fa9499 */ 217 2.3227647400e+02, /* 0x436846c7 */ 218 1.1767937469e+02, /* 0x42eb5bd7 */ 219 8.3646392822e+00, /* 0x4105d590 */ 220}; 221 |
222static __inline float 223ponef(float x) |
224{ 225 const float *p,*q; 226 float z,r,s; 227 int32_t ix; 228 GET_FLOAT_WORD(ix,x); 229 ix &= 0x7fffffff; 230 if(ix>=0x41000000) {p = pr8; q= ps8;} 231 else if(ix>=0x409173eb){p = pr5; q= ps5;} --- 79 unchanged lines hidden (view full) --- 311 2.9533363342e+01, /* 0x41ec4454 */ 312 2.5298155212e+02, /* 0x437cfb47 */ 313 7.5750280762e+02, /* 0x443d602e */ 314 7.3939318848e+02, /* 0x4438d92a */ 315 1.5594900513e+02, /* 0x431bf2f2 */ 316 -4.9594988823e+00, /* 0xc09eb437 */ 317}; 318 |
319static __inline float 320qonef(float x) |
321{ 322 const float *p,*q; 323 float s,r,z; 324 int32_t ix; 325 GET_FLOAT_WORD(ix,x); 326 ix &= 0x7fffffff; 327 if(ix>=0x41000000) {p = qr8; q= qs8;} 328 else if(ix>=0x409173eb){p = qr5; q= qs5;} 329 else if(ix>=0x4036d917){p = qr3; q= qs3;} 330 else {p = qr2; q= qs2;} /* ix>=0x40000000 */ 331 z = one/(x*x); 332 r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5])))); 333 s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*(q[4]+z*q[5]))))); 334 return ((float).375 + r/s)/x; 335} |