Browse Source

math: simplify hypot and hypotf using scalbn

this also fixes overflow/underflow raising and excess
precision issues (as those are handled well in scalbn)
Szabolcs Nagy 12 years ago
parent
commit
529a8de46c
2 changed files with 4 additions and 11 deletions
  1. 2 7
      src/math/hypot.c
  2. 2 4
      src/math/hypotf.c

+ 2 - 7
src/math/hypot.c

@@ -117,12 +117,7 @@ double hypot(double x, double y)
 		t2 = a - t1;
 		w  = sqrt(t1*y1-(w*(-w)-(t1*y2+t2*b)));
 	}
-	if (k != 0) {
-		uint32_t high;
-		t1 = 1.0;
-		GET_HIGH_WORD(high, t1);
-		SET_HIGH_WORD(t1, high+(k<<20));
-		return t1*w;
-	}
+	if (k)
+		w = scalbn(w, k);
 	return w;
 }

+ 2 - 4
src/math/hypotf.c

@@ -80,9 +80,7 @@ float hypotf(float x, float y)
 		t2 = a - t1;
 		w  = sqrtf(t1*y1-(w*(-w)-(t1*y2+t2*b)));
 	}
-	if (k != 0) {
-		SET_FLOAT_WORD(t1, 0x3f800000+(k<<23));
-		return t1*w;
-	}
+	if (k)
+		w = scalbnf(w, k);
 	return w;
 }