]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix ldbl-128ibm hypotl internal underflows (bug 14869).
authorJoseph Myers <joseph@codesourcery.com>
Thu, 22 Nov 2012 14:58:41 +0000 (14:58 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Thu, 22 Nov 2012 14:58:41 +0000 (14:58 +0000)
ChangeLog
NEWS
math/libm-test.inc
sysdeps/ieee754/ldbl-128ibm/e_hypotl.c

index 69dd8fe2d82be7be78715e6d4dbac90e9e6b36b2..34e93e53c4f34afd961332a1eaf429c8a2877589 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2012-11-22  Joseph Myers  <joseph@codesourcery.com>
 
+       [BZ #14869]
+       * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl): Scale
+       up arguments below 2**-450, not just those below 2**-500.
+       * math/libm-test.inc (hypot_test): Add another test.
+
        [BZ #14868]
        * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl):
        Return a+b for ratio over 2**120, not 2**60.
diff --git a/NEWS b/NEWS
index 94e1260137a55aeeafc461cc2bbfb594f61c6da4..51de010ebb5d4273be4de2de3ab13076a683c414 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -21,7 +21,7 @@ Version 2.17
   14638, 14645, 14648, 14652, 14660, 14661, 14669, 14672, 14683, 14694,
   14716, 14719, 14743, 14767, 14783, 14784, 14785, 14793, 14796, 14797,
   14801, 14805, 14807, 14809, 14811, 14815, 14821, 14822, 14824, 14828,
-  14831, 14835, 14838, 14856, 14863, 14865, 14866, 14868.
+  14831, 14835, 14838, 14856, 14863, 14865, 14866, 14868, 14869.
 
 * Port to ARM AArch64 contributed by Linaro.
 
index 21f46469de4b517e85fe63dae02303b76db46bc4..b96f1bf92e5cc161859fe38716ad5220186341d0 100644 (file)
@@ -5731,6 +5731,9 @@ hypot_test (void)
   TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
 
   TEST_ff_f (hypot, 1.0L, 0x1p-61L, 1.0L);
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
+  TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L);
+#endif
 
 #if !(defined TEST_FLOAT && defined TEST_INLINE)
   TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
index ce21194cd59487c03f8db6fb0f69f9120c6d5bfa..768bd3b06ca1b3462d232ac7bc600cceb857c681 100644 (file)
@@ -83,7 +83,7 @@ __ieee754_hypotl(long double x, long double y)
           k += 600;
           kld = two600;
        }
-       if(hb < 0x20b0000000000000LL) { /* b < 2**-500 */
+       if(hb < 0x23d0000000000000LL) { /* b < 2**-450 */
            if(hb <= 0x000fffffffffffffLL) {    /* subnormal b or 0 */
                u_int64_t low;
                GET_LDOUBLE_LSW64(low,b);