_WMRTLINK double _IF_dlog( double x ) /***********************************/ { int exp; double z; if( x <= 0.0 ) { x = __log87_err( x, FP_FUNC_LOG ); #if defined(_M_IX86) } else if( _RWD_real87 ) { x = _log87( x ); #endif } else { x = frexp( x, &exp ); z = x - .5; if( x > sqrt_of_half ) { z -= .5; } else { x = z; --exp; } z = z / (x * .5 + .5); x = z * z; x = z + z * x * _EvalPoly( x, APoly, 2 ) / _EvalPoly( x, BPoly, 3 ); if( exp != 0 ) { z = exp; x = (z * C2 + x) + z * C1; } } return( x ); }
_WMRTLINK double y1( double x ) /* Bessel function y1(x) */ /*******************/ { double xx, y, z; if( x < 0.0 ) { // z = _matherr( DOMAIN, "y1", &x, &x, - HUGE_VAL ); z = __math1err( FUNC_Y1 | M_DOMAIN | V_NEG_HUGEVAL, &x ); } else if( x < 8.0 ) { y = x * x; z = PDIV( x * _EvalPoly( y, _Y1P, 10 ) , _EvalPoly( y, _Y1Q, 4 ) ) + Two_over_pi * ( j1(x) * log(x) - PDIV(1.0,x) ); } else { z = PDIV( 8.0 , x ); y = z * z; xx = x - ThreePIby4; z = sqrt( PDIV( Two_over_pi , x ) ) * ( PDIV( sin(xx) * _EvalPoly( y, _P1P, 4 ) , _EvalPoly( y, _P1Q, 5 ) ) + z * cos(xx) *(PDIV(_EvalPoly( y, _Q1P, 4 ) , _EvalPoly( y, _Q1Q, 4 )))); } return( z ); }
_WMRTLINK double j1( double x ) /* Bessel function j1(x) */ /*****************************/ { double ax, xx, y, z; ax = fabs( x ); if( ax < 8.0 ) { y = x * x; z = PDIV( x * _EvalPoly( y, _J1P, 7 ) , _EvalPoly( y, _J1Q, 7 ) ); } else { z = PDIV( 8.0, ax ); y = z * z; xx = ax - ThreePIby4; z = sqrt( PDIV( TwobyPI, ax ) ) * ( PDIV( cos( xx ) * _EvalPoly( y, _P1P, 4 ) , _EvalPoly( y, _P1Q, 5 ) ) - z * sin( xx ) * (PDIV( _EvalPoly( y, _Q1P, 4 ) , _EvalPoly( y, _Q1Q, 4 ) )) ); if( x < 0.0 ) { z = - z; } } return( z ); }