  We describe a method for the rapid numerical evaluation of the Bessel
functions of the first and second kinds of nonnegative real orders and positive
arguments. Our algorithm makes use of the well-known observation that although
the Bessel functions themselves are expensive to represent via piecewise
polynomial expansions, the logarithms of certain solutions of Bessel's equation
are not. We exploit this observation by numerically precomputing the logarithms
of carefully chosen Bessel functions and representing them with piecewise
bivariate Chebyshev expansions. Our scheme is able to evaluate Bessel functions
of orders between $0$ and $1\sep,000\sep,000\sep,000$ at essentially any
positive real argument. In that regime, it is competitive with existing methods
for the rapid evaluation of Bessel functions and has several advantages over
them. First, our approach is quite general and can be readily applied to many
other special functions which satisfy second order ordinary differential
equations. Second, by calculating the logarithms of the Bessel functions rather
than the Bessel functions themselves, we avoid many issues which arise from
numerical overflow and underflow. Third, in the oscillatory regime, our
algorithm calculates the values of a nonoscillatory phase function for Bessel's
differential equation and its derivative. These quantities are useful for
computing the zeros of Bessel functions, as well as for rapidly applying the
Fourier-Bessel transform. The results of extensive numerical experiments
demonstrating the efficacy of our algorithm are presented. A Fortran package
which includes our code for evaluating the Bessel functions as well as our code
for all of the numerical experiments described here is publically available.
