summaryrefslogtreecommitdiff
path: root/src/math/exp.c
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2013-09-06 18:35:55 +0000
committerSzabolcs Nagy <nsz@port70.net>2013-09-06 18:35:55 +0000
commit9b0fcb441a44456c7b071c7cdaf90403f81ec05a (patch)
treeebb08b777b53c318dc8ba55cd2979a17689843d6 /src/math/exp.c
parentf657fe4b9f734d7fdea515af8dffbf7c28ce4fbc (diff)
downloadmusl-9b0fcb441a44456c7b071c7cdaf90403f81ec05a.tar.gz
math: remove STRICT_ASSIGN macro
gcc did not always drop excess precision according to c99 at assignments before version 4.5 even if -std=c99 was requested which caused badly broken mathematical functions on i386 when FLT_EVAL_METHOD!=0 but STRICT_ASSIGN was not used consistently and it is worked around for old compilers with -ffloat-store so it is no longer needed the new convention is to get the compiler respect c99 semantics and when excess precision is not harmful use float_t or double_t or to specialize code using FLT_EVAL_METHOD
Diffstat (limited to 'src/math/exp.c')
-rw-r--r--src/math/exp.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/math/exp.c b/src/math/exp.c
index 2b182acd..9ea672fa 100644
--- a/src/math/exp.c
+++ b/src/math/exp.c
@@ -94,7 +94,7 @@ double exp(double x)
return x;
if (x > 709.782712893383973096) {
/* overflow if x!=inf */
- STRICT_ASSIGN(double, x, 0x1p1023 * x);
+ x *= 0x1p1023;
return x;
}
if (x < -708.39641853226410622) {
@@ -113,7 +113,7 @@ double exp(double x)
k = 1 - sign - sign;
hi = x - k*ln2hi; /* k*ln2hi is exact here */
lo = k*ln2lo;
- STRICT_ASSIGN(double, x, hi - lo);
+ x = hi - lo;
} else if (hx > 0x3e300000) { /* if |x| > 2**-28 */
k = 0;
hi = x;