/* * arccos(x) = pi/2 - arcsin(x) */ struct fpn * fpu_acos(struct fpemu *fe) { struct fpn *r; if (ISNAN(&fe->fe_f2)) return &fe->fe_f2; if (ISINF(&fe->fe_f2)) return fpu_newnan(fe); r = fpu_asin(fe); CPYFPN(&fe->fe_f2, r); /* pi/2 - asin(x) */ fpu_const(&fe->fe_f1, FPU_CONST_PI); fe->fe_f1.fp_exp--; fe->fe_f2.fp_sign = !fe->fe_f2.fp_sign; r = fpu_add(fe); return r; }
double asin( double ang ) { extern double fpu_asin(double); return fpu_asin(ang); }