summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2012-11-13 21:54:32 +0100
committerSzabolcs Nagy <nsz@port70.net>2012-11-13 21:54:32 +0100
commit529a8de46cbf6cce525ab25c4532822006502f29 (patch)
tree96eb7a3856ad9280f1b308d67069580ff55d558a /src
parent6d3f1a39c14b12026df84f386875b094e3652990 (diff)
downloadmusl-529a8de46cbf6cce525ab25c4532822006502f29.tar.gz
musl-529a8de46cbf6cce525ab25c4532822006502f29.tar.bz2
musl-529a8de46cbf6cce525ab25c4532822006502f29.tar.xz
musl-529a8de46cbf6cce525ab25c4532822006502f29.zip
math: simplify hypot and hypotf using scalbn
this also fixes overflow/underflow raising and excess precision issues (as those are handled well in scalbn)
Diffstat (limited to 'src')
-rw-r--r--src/math/hypot.c9
-rw-r--r--src/math/hypotf.c6
2 files changed, 4 insertions, 11 deletions
diff --git a/src/math/hypot.c b/src/math/hypot.c
index ba4c7575..9a4cbdb3 100644
--- a/src/math/hypot.c
+++ b/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;
}
diff --git a/src/math/hypotf.c b/src/math/hypotf.c
index 9fd77e6a..4d80178d 100644
--- a/src/math/hypotf.c
+++ b/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;
}