コード例 #1
0
double tangent_kernel(double x, double y, int iy) {
  double z, r, v, w, s;
  int ix, hx;
  hx = __JHI(x);   /* high word of x */
  ix = hx & 0x7fffffff; /* high word of |x| */
  if (ix < 0x3e300000) {           /* x < 2**-28 */
    if (jvm_d2i(x) == 0) {            /* generate inexact */
      if (((ix | __JLO(x)) | (iy + 1)) == 0) {
        return jvm_ddiv(one_t, jvm_fplib_fabs(x));
      } else {
        return (iy == 1)? x: jvm_ddiv(jvm_dneg(one_t), x);
      }
    }
  }
  if (ix >= 0x3FE59428) {            /* |x|>=0.6744 */
    if (hx < 0) {
      x = jvm_dneg(x);
      y = jvm_dneg(y);
    }
    z = jvm_dsub(pio4, x);
    w = jvm_dsub(pio4lo, y);
    x = jvm_dadd(z, w);
    y = 0.0;
  }
  z =  jvm_dmul(x, x);
  w =  jvm_dmul(z, z);
  /* Break x^5*(T[1]+x^2*T[2]+...) into
   *    x^5(T[1]+x^4*T[3]+...+x^20*T[11]) +
   *    x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12]))
   */
  //r = T[1]+w*(T[3]+w*(T[5]+w*(T[7]+w*(T[9]+w*T[11]))));
  r = jvm_dadd(T[1], jvm_dmul(w, jvm_dadd(T[3], jvm_dmul(w, jvm_dadd(T[5], jvm_dmul(w, jvm_dadd(T[7], jvm_dmul(w, jvm_dadd(T[9], jvm_dmul(w, T[11]))))))))));
  //v = z*(T[2]+w*(T[4]+w*(T[6]+w*(T[8]+w*(T[10]+w*T[12])))));
  v = jvm_dmul(z, jvm_dadd(T[2], jvm_dmul(w, jvm_dadd(T[4], jvm_dmul(w, jvm_dadd(T[6], jvm_dmul(w, jvm_dadd(T[8], jvm_dmul(w, jvm_dadd(T[10], jvm_dmul(w, T[12])))))))))));
  s = jvm_dmul(z, x);
  r = jvm_dadd(y, jvm_dmul(z, jvm_dmul(s, jvm_dadd(jvm_dadd(r, v), y))));
  r = jvm_dadd(r, jvm_dmul(T[0], s));
  w = jvm_dadd(x, r);
  if(ix >= 0x3FE59428) {
    v = jvm_i2d(iy);
    return jvm_dmul(jvm_i2d((1 - ((hx >> 30) & 2))),
     jvm_dsub(v, jvm_dmul(2.0, jvm_dsub(x, jvm_dsub(jvm_dmul(w, jvm_ddiv( w, jvm_dadd(w, v))), r)))));
  }
コード例 #2
0
ファイル: FloatNatives.cpp プロジェクト: sfsy1989/j2me
// Note the name of this function follows the C library's fabs(), which
// takes a *double*. Incidentally, the version that takes in a *float* is named
// fabsf().
JVM_SOFTFP_LINKAGE jdouble jvm_fabs(jdouble x) {
  return jvm_fplib_fabs(x);
}