Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Schriever <fabian.schriever@gtd-gmbh.de>2020-03-19 18:34:08 +0300
committerCorinna Vinschen <corinna@vinschen.de>2020-03-19 18:46:17 +0300
commit6b0c1e7cc8e4b0568f00c8444fff8da67688add3 (patch)
tree23b321d54bcb077142e570c864d216024bafc48a /newlib/libm/math
parent4ad9ba42fc3dd116bad8b9cb89d434256d3431fb (diff)
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/libm/math')
-rw-r--r--newlib/libm/math/ef_hypot.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/newlib/libm/math/ef_hypot.c b/newlib/libm/math/ef_hypot.c
index 9368eb41c..a70c92b88 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)));
}