60 static partial class fdlibm
62 internal static double __ieee754_hypot(
double x,
double y)
64 double a = x, b = y, t1, t2, y1, y2, w;
67 ha = __HI(x) & 0x7fffffff;
68 hb = __HI(y) & 0x7fffffff;
69 if (hb > ha) { a = y; b = x; j = ha; ha = hb; hb = j; }
else { a = x; b = y; }
72 if ((ha - hb) > 0x3c00000) {
return a + b; }
79 if (((ha & 0xfffff) | __LO(a)) == 0) w = a;
80 if (((hb ^ 0x7ff00000) | __LO(b)) == 0) w = b;
84 ha -= 0x25800000; hb -= 0x25800000; k += 600;
92 if ((hb | (__LO(b))) == 0)
return a;
94 t1 = __HI(t1, 0x7fd00000);
115 w = sqrt(t1 * t1 - (b * (-b) - t2 * (a + t1)));
124 t1 = __HI(t1, ha + 0x00100000);
126 w = sqrt(t1 * y1 - (w * (-w) - (t1 * y2 + t2 * b)));
131 t1 = __HI(t1, __HI(t1) + (k << 20));