aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/ieee754/ldbl-128/e_hypotl.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2013-12-17 13:42:13 +0000
committerJoseph Myers <joseph@codesourcery.com>2013-12-17 13:42:13 +0000
commitc88769dda4199d15267259fd3c9b986e6690a901 (patch)
tree743ef394beae012b285cc655faa375293445361f /sysdeps/ieee754/ldbl-128/e_hypotl.c
parente4a110f59e6317a52dde765ceb3571763ca07a9a (diff)
downloadglibc-c88769dda4199d15267259fd3c9b986e6690a901.zip
glibc-c88769dda4199d15267259fd3c9b986e6690a901.tar.gz
glibc-c88769dda4199d15267259fd3c9b986e6690a901.tar.bz2
Fix hypot handling of subnormals (bug 16316, bug 16330).
Diffstat (limited to 'sysdeps/ieee754/ldbl-128/e_hypotl.c')
-rw-r--r--sysdeps/ieee754/ldbl-128/e_hypotl.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sysdeps/ieee754/ldbl-128/e_hypotl.c b/sysdeps/ieee754/ldbl-128/e_hypotl.c
index f5ab901..01444cf 100644
--- a/sysdeps/ieee754/ldbl-128/e_hypotl.c
+++ b/sysdeps/ieee754/ldbl-128/e_hypotl.c
@@ -89,6 +89,17 @@ __ieee754_hypotl(long double x, long double y)
b *= t1;
a *= t1;
k -= 16382;
+ GET_LDOUBLE_MSW64 (ha, a);
+ GET_LDOUBLE_MSW64 (hb, b);
+ if (hb > ha)
+ {
+ t1 = a;
+ a = b;
+ b = t1;
+ j = ha;
+ ha = hb;
+ hb = j;
+ }
} else { /* scale a and b by 2^9600 */
ha += 0x2580000000000000LL; /* a *= 2^9600 */
hb += 0x2580000000000000LL; /* b *= 2^9600 */