Esempio n. 1
0
/*
 *                          x
 * arcsin(x) = arctan(---------------)
 *                     sqrt(1 - x^2)
 */
struct fpn *
fpu_asin(struct fpemu *fe)
{
    struct fpn x;
    struct fpn *r;

    if (ISNAN(&fe->fe_f2))
        return &fe->fe_f2;
    if (ISZERO(&fe->fe_f2))
        return &fe->fe_f2;

    if (ISINF(&fe->fe_f2))
        return fpu_newnan(fe);

    CPYFPN(&x, &fe->fe_f2);

    /* x^2 */
    CPYFPN(&fe->fe_f1, &fe->fe_f2);
    r = fpu_mul(fe);

    /* 1 - x^2 */
    CPYFPN(&fe->fe_f2, r);
    fe->fe_f2.fp_sign = 1;
    fpu_const(&fe->fe_f1, FPU_CONST_1);
    r = fpu_add(fe);

    /* sqrt(1-x^2) */
    CPYFPN(&fe->fe_f2, r);
    r = fpu_sqrt(fe);

    /* x/sqrt */
    CPYFPN(&fe->fe_f2, r);
    CPYFPN(&fe->fe_f1, &x);
    r = fpu_div(fe);

    /* arctan */
    CPYFPN(&fe->fe_f2, r);
    return fpu_atan(fe);
}
Esempio n. 2
0
double sqrt( double val )
{
	extern double fpu_sqrt(double);
	return fpu_sqrt(val);
}