Exemplo n.º 1
0
double jvm_fplib_acos(double x) {
  double z,p,q,r,w,s,c,df;
  int hx,ix;
  hx = __JHI(x);
  ix = hx&0x7fffffff;
  if(ix>=0x3ff00000) {	/* |x| >= 1 */
    if(((ix-0x3ff00000)|__JLO(x))==0) {	/* |x|==1 */
      if(hx>0) return 0.0;		/* acos(1) = 0  */
      else return ac_pi+2.0*ac_pio2_lo;	/* acos(-1)= pi */
    }
    return jvm_ddiv(jvm_dsub(x, x), jvm_dsub(x, x));		/* acos(|x|>1) is NaN */
  }
  if(ix<0x3fe00000) {	/* |x| < 0.5 */
    if(ix<=0x3c600000) return ac_pio2_hi+ac_pio2_lo;/*if|x|<2**-57*/
    z = jvm_dmul(x, x);
    p = jvm_dmul(z, jvm_dadd(ac_pS0, jvm_dmul(z, jvm_dadd(ac_pS1, jvm_dmul(z, jvm_dadd(ac_pS2, jvm_dmul(z, jvm_dadd(ac_pS3, jvm_dmul(z, jvm_dadd(ac_pS4, jvm_dmul(z, ac_pS5)))))))))));
    q = jvm_dadd(ac_one, jvm_dmul(z, jvm_dadd(ac_qS1, jvm_dmul(z, jvm_dadd(ac_qS2, jvm_dmul(z, jvm_dadd(ac_qS3, jvm_dmul(z, ac_qS4))))))));
    r = jvm_ddiv(p, q);
    return jvm_dsub(ac_pio2_hi, jvm_dsub(x, jvm_dsub(ac_pio2_lo, jvm_dmul(x, r))));
  } else  if (hx<0) {		/* x < -0.5 */
    z = jvm_dmul(jvm_dadd(ac_one, x), 0.5);
    p = jvm_dmul(z, jvm_dadd(ac_pS0, jvm_dmul(z, jvm_dadd(ac_pS1, jvm_dmul(z, jvm_dadd(ac_pS2, jvm_dmul(z, jvm_dadd(ac_pS3, jvm_dmul(z, jvm_dadd(ac_pS4, jvm_dmul(z, ac_pS5)))))))))));
    q = jvm_dadd(ac_one, jvm_dmul(z, jvm_dadd(ac_qS1, jvm_dmul(z, jvm_dadd(ac_qS2, jvm_dmul(z, jvm_dadd(ac_qS3, jvm_dmul(z, ac_qS4))))))));
    s = ieee754_sqrt(z);
    r = jvm_ddiv(p, q);
    w = jvm_dsub(jvm_dmul(r, s), ac_pio2_lo);
    return jvm_dsub(ac_pi, jvm_dmul(2.0, jvm_dadd(s, w)));
  } else {			/* x > 0.5 */
    z = jvm_dmul(jvm_dsub(ac_one, x), 0.5);
    s = ieee754_sqrt(z);
    df = s;
    __JLO(df) = 0;
    c  = jvm_ddiv(jvm_dsub(z, jvm_dmul(df, df)), jvm_dadd(s, df));
    p = jvm_dmul(z, jvm_dadd(ac_pS0, jvm_dmul(z, jvm_dadd(ac_pS1, jvm_dmul(z, jvm_dadd(ac_pS2, jvm_dmul(z, jvm_dadd(ac_pS3, jvm_dmul(z, jvm_dadd(ac_pS4, jvm_dmul(z, ac_pS5)))))))))));
    q = jvm_dadd(ac_one, jvm_dmul(z, jvm_dadd(ac_qS1, jvm_dmul(z, jvm_dadd(ac_qS2, jvm_dmul(z, jvm_dadd(ac_qS3, jvm_dmul(z, ac_qS4))))))));
    r = jvm_ddiv(p, q);
    w = jvm_dadd(jvm_dmul(r, s), c);
    return jvm_dmul(2.0, jvm_dadd(df, w));
  }
}
Exemplo n.º 2
0
JVM_SOFTFP_LINKAGE jdouble jvm_sqrt(jdouble x) {
  return ieee754_sqrt(x);
}