/* * This routine solves a quadratic equation: * 0 = a0 + a1.x + a2.x^2 * placing the (complex) roots in r1 and r2. */ void quad_complex( dcomplex a0, dcomplex a1, dcomplex a2, dcomplex *r1, dcomplex *r2 ) { double sign; dcomplex d, q; d = sub_dc( mul_dc( a1, a1 ), rmul_dc( 4.0, mul_dc( a2, a0) ) ); sign = mul_dc( conj_dc(a1), d ).r > 0.0 ? +1.0 : -1.0; q = rmul_dc( -0.5, add_dc( a1, rmul_dc( sign, sqrt_dc( d ) ) ) ); *r1 = div_dc( q, a2); *r2 = div_dc( a0, q); return; }
void wairy( double x, dcomplex *w1, dcomplex *w2, dcomplex *w1p, dcomplex *w2p ) { double factor = SQRTPI; double ai, bi, aip, bip; airy( x, &ai, &bi, &aip, &bip ); *w1 = mk_dc( ai, bi ); *w1 = rmul_dc( factor, *w1 ); *w2 = mk_dc( ai, -bi ); *w2 = rmul_dc( factor, *w2 ); *w1p = mk_dc( aip, bip ); *w1p = rmul_dc( factor, *w1p ); *w2p = mk_dc( aip, -bip ); *w2p = rmul_dc( factor, *w2p ); }