Esempio n. 1
0
_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 );
}
Esempio n. 2
0
_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 );
    }
Esempio n. 3
0
_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 );
}