Red Hat Bugzilla – Bug 3231
Bessel function y0(x) broken for x<2
Last modified: 2008-05-01 11:37:50 EDT
glibc-2.1.1 has a broken Bessel function y0(x) for any value
A coding change in libc/sysdeps/libm-ieee754/e_j0.c has
broken the evalation of y0(x) for x<2. Evaluating y0(x) for
any value less than 2 will give the wrong answer.
Specifically lines 237-239 of this file should read:
v1 = one*z*V;
v2 = V+z*V;
v = v1 + z2*v2 + z4*V;
The problem is the indexing of V which should read from 0,
The libc maintainers have been informed of this and will fix
it for the next release (libc bug number 1145). However,
this is a serious bug in that the general Bessel function
yn(x) will also return the wrong answers as y0(x) is used to
generate yn(n). This may break many numerical codes that
use Bessel functions.
*** Bug 3415 has been marked as a duplicate of this bug. ***
Function besy0(x) gives very inaccurate results (the error
is very high) for values of the argument x lesser 2.
Function besy1 gives correct results, but besyn(n,x) gives
wrong results for n>1 and x<2.
This issue has been forwarded to a developer for further action.
Fixed in glibc 2.1.2. Please reopen if this is still a problem.
The new package should ba available in rawhide shortly.