public static double hypot(double x,double y){
  if (USE_JDK_MATH) {
    return STRICT_MATH ? StrictMath.hypot(x,y) : Math.hypot(x,y);
  }
  x=Math.abs(x);
  y=Math.abs(y);
  if (y < x) {
    double a=x;
    x=y;
    y=a;
  }
 else   if (!(y >= x)) {
    if ((x == Double.POSITIVE_INFINITY) || (y == Double.POSITIVE_INFINITY)) {
      return Double.POSITIVE_INFINITY;
    }
 else {
      return Double.NaN;
    }
  }
  if (y - x == y) {
    return y;
  }
 else {
    double factor;
    if (x > TWO_POW_450) {
      x*=TWO_POW_N750;
      y*=TWO_POW_N750;
      factor=TWO_POW_750;
    }
 else     if (y < TWO_POW_N450) {
      x*=TWO_POW_750;
      y*=TWO_POW_750;
      factor=TWO_POW_N750;
    }
 else {
      factor=1.0;
    }
    return factor * FastMath.sqrt(x * x + y * y);
  }
}

public static double hypot ( double x , double y ) { if ( USE_JDK_MATH ) { return STRICT_MATH ? StrictMath . hypot ( x , y ) : Math . hypot ( x , y ) ; } x = Math . abs ( x ) ; y = Math . abs ( y ) ; if ( y < x ) { double a = x ; x = y ; y = a ; } else if ( ! ( y >= x ) ) { if ( ( x == Double . POSITIVE_INFINITY ) || ( y == Double . POSITIVE_INFINITY ) ) { return Double . POSITIVE_INFINITY ; } else { return Double . NaN ; } } if ( y - x == y ) { return y ; } else { double factor ; if ( x > TWO_POW_450 ) { x *= TWO_POW_N750 ; y *= TWO_POW_N750 ; factor = TWO_POW_750 ; } else if ( y < TWO_POW_N450 ) { x *= TWO_POW_750 ; y *= TWO_POW_750 ; factor = TWO_POW_N750 ; } else { factor = 1.0 ; } return factor * FastMath . sqrt ( x * x + y * y ) ; } }
returns sqrt ( x ^ 2 + y ^ 2 ) without intermediate overflow or underflow .
