public static double logQuick(double value){
  if (USE_JDK_MATH) {
    return Math.log(value);
  }
  double h;
  if (value > 0.87) {
    if (value < 1.16) {
      return 2.0 * (value - 1.0) / (value + 1.0);
    }
    h=0.0;
  }
 else   if (value < DOUBLE_MIN_NORMAL) {
    value*=TWO_POW_52;
    h=-52 * LOG_2;
  }
 else {
    h=0.0;
  }
  final int valueBitsHi=(int)(Double.doubleToRawLongBits(value) >> 32);
  final int valueExp=(valueBitsHi >> 20) - MAX_DOUBLE_EXPONENT;
  final int xIndex=valueBitsHi << 12 >>> 32 - LOG_BITS;
  return h + valueExp * LOG_2 + MyTLog.logXLogTab[xIndex];
}

public static double logQuick ( double value ) { if ( USE_JDK_MATH ) { return Math . log ( value ) ; } double h ; if ( value > 0.87 ) { if ( value < 1.16 ) { return 2.0 * ( value - 1.0 ) / ( value + 1.0 ) ; } h = 0.0 ; } else if ( value < DOUBLE_MIN_NORMAL ) { value *= TWO_POW_52 ; h = - 52 * LOG_2 ; } else { h = 0.0 ; } final int valueBitsHi = ( int ) ( Double . doubleToRawLongBits ( value ) > > 32 ) ; final int valueExp = ( valueBitsHi > > 20 ) - MAX_DOUBLE_EXPONENT ; final int xIndex = valueBitsHi << 12 > > > 32 - LOG_BITS ; return h + valueExp * LOG_2 + MyTLog . logXLogTab [ xIndex ] ; }
quick log , with a max relative error of about 1 . 9e - 3 for values in ] double . min_normal , + infinity [ , and worse accuracy outside this range .
