summaryrefslogtreecommitdiffstats
path: root/lib/libm/src/e_jn.c
diff options
context:
space:
mode:
authormartynas <martynas@openbsd.org>2008-09-07 20:36:06 +0000
committermartynas <martynas@openbsd.org>2008-09-07 20:36:06 +0000
commit7b36286a70b46b494e2bca4a889ab49ef62ba86c (patch)
treeb2b9870e3495ed88715e57b0d4a9888b16264fe0 /lib/libm/src/e_jn.c
parentsparc now requires this bloated library to be -fPIC (diff)
downloadwireguard-openbsd-7b36286a70b46b494e2bca4a889ab49ef62ba86c.tar.xz
wireguard-openbsd-7b36286a70b46b494e2bca4a889ab49ef62ba86c.zip
- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks - use the real strtof implementation - add strtold, __hdtoa, __hldtoa - add %a/%A support - don't lose precision in printf, don't round to double anymore - implement extended-precision versions of libc functions: fpclassify, isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is fixed - separate vax versions of strtof, and __hdtoa - add complex math support. added functions: cacos, casin, catan, ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp, clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf, casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf, ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf, cimagf, conjf, cprojf, crealf - add fdim, fmax, fmin - add log2. (adapted implementation e_log.c. could be more acruate & faster, but it's good enough for now) - remove wrappers & cruft in libm, supposed to work-around mistakes in SVID, etc.; use ieee versions. fixes issues in python 2.6 for djm@ - make _digittoint static - proper definitions for i386, and amd64 in ieee.h - sh, powerpc don't really have extended-precision - add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h for LDBL_* - merge lead to frac for m{6,8}k, for gdtoa to work properly - add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa to use - add EXT_IMPLICIT_NBIT definition, which indicates implicit normalization bit - add regression tests for libc: fpclassify and printf - arith.h & gd_qnan.h definitions - update ieee.h: hppa doesn't have quad-precision, hppa64 does - add missing prototypes to gdtoaimp - on 64-bit platforms make sure gdtoa doesn't use a long when it really wants an int - etc., what i may have forgotten... - bump libm major, due to removed&changed symbols - no libc bump, since this is riding on djm's libc major crank from a day ago discussed with / requested by / testing theo, sthen@, djm@, jsg@, merdely@, jsing@, tedu@, brad@, jakemsr@, and others. looks good to millert@ parts of the diff ok kettenis@ this commit does not include: - man page changes
Diffstat (limited to 'lib/libm/src/e_jn.c')
-rw-r--r--lib/libm/src/e_jn.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/lib/libm/src/e_jn.c b/lib/libm/src/e_jn.c
index ada373aa6b4..f22231a8e97 100644
--- a/lib/libm/src/e_jn.c
+++ b/lib/libm/src/e_jn.c
@@ -15,7 +15,7 @@ static char rcsid[] = "$NetBSD: e_jn.c,v 1.9 1995/05/10 20:45:34 jtc Exp $";
#endif
/*
- * __ieee754_jn(n, x), __ieee754_yn(n, x)
+ * jn(n, x), yn(n, x)
* floating point Bessel's function of the 1st and 2nd kind
* of order n
*
@@ -51,7 +51,7 @@ one = 1.00000000000000000000e+00; /* 0x3FF00000, 0x00000000 */
static const double zero = 0.00000000000000000000e+00;
double
-__ieee754_jn(int n, double x)
+jn(int n, double x)
{
int32_t i,hx,ix,lx, sgn;
double a, b, temp, di;
@@ -69,8 +69,8 @@ __ieee754_jn(int n, double x)
x = -x;
hx ^= 0x80000000;
}
- if(n==0) return(__ieee754_j0(x));
- if(n==1) return(__ieee754_j1(x));
+ if(n==0) return(j0(x));
+ if(n==1) return(j1(x));
sgn = (n&1)&(hx>>31); /* even n -- 0, odd n -- sign(x) */
x = fabs(x);
if((ix|lx)==0||ix>=0x7ff00000) /* if x is 0 or inf */
@@ -99,8 +99,8 @@ __ieee754_jn(int n, double x)
}
b = invsqrtpi*temp/sqrt(x);
} else {
- a = __ieee754_j0(x);
- b = __ieee754_j1(x);
+ a = j0(x);
+ b = j1(x);
for(i=1;i<n;i++){
temp = b;
b = b*((double)(i+i)/x) - a; /* avoid underflow */
@@ -176,7 +176,7 @@ __ieee754_jn(int n, double x)
*/
tmp = n;
v = two/x;
- tmp = tmp*__ieee754_log(fabs(v*tmp));
+ tmp = tmp*log(fabs(v*tmp));
if(tmp<7.09782712893383973096e+02) {
for(i=n-1,di=(double)(i+i);i>0;i--){
temp = b;
@@ -200,14 +200,14 @@ __ieee754_jn(int n, double x)
}
}
}
- b = (t*__ieee754_j0(x)/b);
+ b = (t*j0(x)/b);
}
}
if(sgn==1) return -b; else return b;
}
double
-__ieee754_yn(int n, double x)
+yn(int n, double x)
{
int32_t i,hx,ix,lx;
int32_t sign;
@@ -224,8 +224,8 @@ __ieee754_yn(int n, double x)
n = -n;
sign = 1 - ((n&1)<<1);
}
- if(n==0) return(__ieee754_y0(x));
- if(n==1) return(sign*__ieee754_y1(x));
+ if(n==0) return(y0(x));
+ if(n==1) return(sign*y1(x));
if(ix==0x7ff00000) return zero;
if(ix>=0x52D00000) { /* x > 2**302 */
/* (x >> n**2)
@@ -250,8 +250,8 @@ __ieee754_yn(int n, double x)
b = invsqrtpi*temp/sqrt(x);
} else {
u_int32_t high;
- a = __ieee754_y0(x);
- b = __ieee754_y1(x);
+ a = y0(x);
+ b = y1(x);
/* quit if b is -inf */
GET_HIGH_WORD(high,b);
for(i=1;i<n&&high!=0xfff00000;i++){