diff options
author | Fabian Schriever <fabian.schriever@gtd-gmbh.de> | 2020-03-19 16:34:08 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2020-03-19 16:46:17 +0100 |
commit | 6b0c1e7cc8e4b0568f00c8444fff8da67688add3 (patch) | |
tree | 23b321d54bcb077142e570c864d216024bafc48a /newlib | |
parent | 4ad9ba42fc3dd116bad8b9cb89d434256d3431fb (diff) | |
download | newlib-6b0c1e7cc8e4b0568f00c8444fff8da67688add3.zip newlib-6b0c1e7cc8e4b0568f00c8444fff8da67688add3.tar.gz newlib-6b0c1e7cc8e4b0568f00c8444fff8da67688add3.tar.bz2 |
Fix hypotf missing mask in hi+lo decomposition
Add the missing mask for the decomposition of hi+lo which caused some
errors of 1-2 ULP.
This change is taken over from FreeBSD:
https://github.com/freebsd/freebsd/commit/95436ce20dab5a34ba46373410b96411b1734578
Additionally I've removed some variable assignments which were never
read before being overwritten again in the next 2 lines.
Diffstat (limited to 'newlib')
-rw-r--r-- | newlib/libm/math/ef_hypot.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/newlib/libm/math/ef_hypot.c b/newlib/libm/math/ef_hypot.c index 9368eb4..a70c92b 100644 --- a/newlib/libm/math/ef_hypot.c +++ b/newlib/libm/math/ef_hypot.c @@ -29,7 +29,7 @@ ha &= 0x7fffffffL; GET_FLOAT_WORD(hb,y); hb &= 0x7fffffffL; - if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;} + if(hb > ha) { j = ha; ha = hb; hb = j; } SET_FLOAT_WORD(a,ha); /* a <- |a| */ SET_FLOAT_WORD(b,hb); /* b <- |b| */ if((ha-hb)>0xf000000L) {return a+b;} /* x/y > 2**30 */ @@ -72,7 +72,7 @@ a = a+a; SET_FLOAT_WORD(y1,hb&0xfffff000L); y2 = b - y1; - SET_FLOAT_WORD(t1,ha+0x00800000L); + SET_FLOAT_WORD(t1,(ha+0x00800000L)&0xfffff000UL); t2 = a - t1; w = __ieee754_sqrtf(t1*y1-(w*(-w)-(t1*y2+t2*b))); } |