Module Name: src Committed By: drochner Date: Mon Nov 29 15:10:06 UTC 2010
Modified Files: src/lib/libm/src: e_jn.c e_jnf.c Log Message: fix accuracy problems in argument ranges where j0(x) is small, closes PR lib/44170 by Henning Petersen (originally from Steven G. Kargl per FreeBSD PR bin/144306) To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/lib/libm/src/e_jn.c cvs rdiff -u -r1.10 -r1.11 src/lib/libm/src/e_jnf.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libm/src/e_jn.c diff -u src/lib/libm/src/e_jn.c:1.13 src/lib/libm/src/e_jn.c:1.14 --- src/lib/libm/src/e_jn.c:1.13 Mon Aug 20 16:01:39 2007 +++ src/lib/libm/src/e_jn.c Mon Nov 29 15:10:06 2010 @@ -12,7 +12,7 @@ #include <sys/cdefs.h> #if defined(LIBM_SCCS) && !defined(lint) -__RCSID("$NetBSD: e_jn.c,v 1.13 2007/08/20 16:01:39 drochner Exp $"); +__RCSID("$NetBSD: e_jn.c,v 1.14 2010/11/29 15:10:06 drochner Exp $"); #endif /* @@ -203,7 +203,12 @@ } } } - b = (t*__ieee754_j0(x)/b); + z = __ieee754_j0(x); + w = __ieee754_j1(x); + if (fabs(z) >= fabs(w)) + b = (t*z/b); + else + b = (t*w/a); } } if(sgn==1) return -b; else return b; Index: src/lib/libm/src/e_jnf.c diff -u src/lib/libm/src/e_jnf.c:1.10 src/lib/libm/src/e_jnf.c:1.11 --- src/lib/libm/src/e_jnf.c:1.10 Mon Jan 19 05:58:27 2009 +++ src/lib/libm/src/e_jnf.c Mon Nov 29 15:10:06 2010 @@ -15,7 +15,7 @@ #include <sys/cdefs.h> #if defined(LIBM_SCCS) && !defined(lint) -__RCSID("$NetBSD: e_jnf.c,v 1.10 2009/01/19 05:58:27 lukem Exp $"); +__RCSID("$NetBSD: e_jnf.c,v 1.11 2010/11/29 15:10:06 drochner Exp $"); #endif #include "math.h" @@ -157,7 +157,12 @@ } } } - b = (t*__ieee754_j0f(x)/b); + z = __ieee754_j0f(x); + w = __ieee754_j1f(x); + if (fabsf(z) >= fabsf(w)) + b = (t*z/b); + else + b = (t*w/a); } } if(sgn==1) return -b; else return b;