about summary refs log tree commit diff
path: root/src/math/expf.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/expf.c
parentf657fe4b9f734d7fdea515af8dffbf7c28ce4fbc (diff)
downloadmusl-9b0fcb441a44456c7b071c7cdaf90403f81ec05a.tar.gz
musl-9b0fcb441a44456c7b071c7cdaf90403f81ec05a.tar.xz
musl-9b0fcb441a44456c7b071c7cdaf90403f81ec05a.zip
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/expf.c')
-rw-r--r--src/math/expf.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/math/expf.c b/src/math/expf.c
index 5572bbf6..16e9afe6 100644
--- a/src/math/expf.c
+++ b/src/math/expf.c
@@ -41,7 +41,7 @@ float expf(float x)
 	if (hx >= 0x42aeac50) {  /* if |x| >= -87.33655f or NaN */
 		if (hx >= 0x42b17218 && !sign) {  /* x >= 88.722839f */
 			/* overflow */
-			STRICT_ASSIGN(float, x, x * 0x1p127f);
+			x *= 0x1p127f;
 			return x;
 		}
 		if (sign) {
@@ -60,7 +60,7 @@ float expf(float x)
 			k = 1 - sign - sign;
 		hi = x - k*ln2hi;  /* k*ln2hi is exact here */
 		lo = k*ln2lo;
-		STRICT_ASSIGN(float, x, hi - lo);
+		x = hi - lo;
 	} else if (hx > 0x39000000) {  /* |x| > 2**-14 */
 		k = 0;
 		hi = x;