diff options
Diffstat (limited to 'libm/float/ynf.c')
-rw-r--r-- | libm/float/ynf.c | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/libm/float/ynf.c b/libm/float/ynf.c deleted file mode 100644 index 55d984b26..000000000 --- a/libm/float/ynf.c +++ /dev/null @@ -1,120 +0,0 @@ -/* ynf.c - * - * Bessel function of second kind of integer order - * - * - * - * SYNOPSIS: - * - * float x, y, ynf(); - * int n; - * - * y = ynf( n, x ); - * - * - * - * DESCRIPTION: - * - * Returns Bessel function of order n, where n is a - * (possibly negative) integer. - * - * The function is evaluated by forward recurrence on - * n, starting with values computed by the routines - * y0() and y1(). - * - * If n = 0 or 1 the routine for y0 or y1 is called - * directly. - * - * - * - * ACCURACY: - * - * - * Absolute error, except relative when y > 1: - * - * arithmetic domain # trials peak rms - * IEEE 0, 30 10000 2.3e-6 3.4e-7 - * - * - * ERROR MESSAGES: - * - * message condition value returned - * yn singularity x = 0 MAXNUMF - * yn overflow MAXNUMF - * - * Spot checked against tables for x, n between 0 and 100. - * - */ - -/* -Cephes Math Library Release 2.2: June, 1992 -Copyright 1984, 1987, 1992 by Stephen L. Moshier -Direct inquiries to 30 Frost Street, Cambridge, MA 02140 -*/ - -#include <math.h> -extern float MAXNUMF, MAXLOGF; - -float y0f(float), y1f(float), logf(float); - -float ynf( int nn, float xx ) -{ -float x, an, anm1, anm2, r, xinv; -int k, n, sign; - -x = xx; -n = nn; -if( n < 0 ) - { - n = -n; - if( (n & 1) == 0 ) /* -1**n */ - sign = 1; - else - sign = -1; - } -else - sign = 1; - - -if( n == 0 ) - return( sign * y0f(x) ); -if( n == 1 ) - return( sign * y1f(x) ); - -/* test for overflow */ -if( x <= 0.0 ) - { - mtherr( "ynf", SING ); - return( -MAXNUMF ); - } -if( (x < 1.0) || (n > 29) ) - { - an = (float )n; - r = an * logf( an/x ); - if( r > MAXLOGF ) - { - mtherr( "ynf", OVERFLOW ); - return( -MAXNUMF ); - } - } - -/* forward recurrence on n */ - -anm2 = y0f(x); -anm1 = y1f(x); -k = 1; -r = 2 * k; -xinv = 1.0/x; -do - { - an = r * anm1 * xinv - anm2; - anm2 = anm1; - anm1 = an; - r += 2.0; - ++k; - } -while( k < n ); - - -return( sign * an ); -} |