glibc-2.1.1 has a broken Bessel function y0(x) for any value of x<2. 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[0]; v2 = V[1]+z*V[2]; v = v1 + z2*v2 + z4*V[3]; The problem is the indexing of V which should read from 0, NOT 1. 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.