mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-10 05:03:06 +03:00
Fix ldbl-96 hypotl of subnormals (bug 15529).
This commit is contained in:
@@ -1,5 +1,10 @@
|
|||||||
2013-05-24 Joseph Myers <joseph@codesourcery.com>
|
2013-05-24 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
[BZ #15529]
|
||||||
|
* sysdeps/ieee754/ldbl-96/e_hypotl.c (__ieee754_hypotl): Set high
|
||||||
|
bit of mantissa of 2^16382.
|
||||||
|
* math/libm-test.inc (hypot_test_data): Add more tests.
|
||||||
|
|
||||||
* math/libm-test.inc: Add drem and pow10 to list of tested
|
* math/libm-test.inc: Add drem and pow10 to list of tested
|
||||||
functions.
|
functions.
|
||||||
(pow10_test): New function.
|
(pow10_test): New function.
|
||||||
|
3
NEWS
3
NEWS
@@ -18,7 +18,8 @@ Version 2.18
|
|||||||
15287, 15304, 15305, 15307, 15309, 15327, 15330, 15335, 15336, 15337,
|
15287, 15304, 15305, 15307, 15309, 15327, 15330, 15335, 15336, 15337,
|
||||||
15339, 15342, 15346, 15359, 15361, 15366, 15380, 15381, 15394, 15395,
|
15339, 15342, 15346, 15359, 15361, 15366, 15380, 15381, 15394, 15395,
|
||||||
15405, 15406, 15409, 15416, 15418, 15419, 15423, 15424, 15426, 15429,
|
15405, 15406, 15409, 15416, 15418, 15419, 15423, 15424, 15426, 15429,
|
||||||
15441, 15442, 15448, 15480, 15485, 15488, 15490, 15493, 15497, 15506.
|
15441, 15442, 15448, 15480, 15485, 15488, 15490, 15493, 15497, 15506,
|
||||||
|
15529.
|
||||||
|
|
||||||
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
|
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
|
||||||
#15078).
|
#15078).
|
||||||
|
@@ -9386,6 +9386,19 @@ static const struct test_ff_f_data hypot_test_data[] =
|
|||||||
|
|
||||||
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
|
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
|
||||||
TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L),
|
TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L),
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TEST_ff_f (hypot, 0x1p-149L, 0x1p-149L, 1.9817352931807469938024533350782879785095e-45L, UNDERFLOW_EXCEPTION_FLOAT),
|
||||||
|
|
||||||
|
#ifndef TEST_FLOAT
|
||||||
|
TEST_ff_f (hypot, 0x1p-1074L, 0x1p-1074L, 6.9871433705131320800651344656990806305791e-324L, UNDERFLOW_EXCEPTION_DOUBLE),
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381 && !defined TEST_INLINE
|
||||||
|
TEST_ff_f (hypot, 0x1p-16445L, 0x1p-16445L, 5.1550906155442528702558159159596215039925e-4951L, UNDERFLOW_EXCEPTION),
|
||||||
|
# if LDBL_MANT_DIG >= 113
|
||||||
|
TEST_ff_f (hypot, 0x1p-16494L, 0x1p-16494L, 9.1572804726500807075521065242888978445857e-4966L, UNDERFLOW_EXCEPTION),
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -85,7 +85,7 @@ long double __ieee754_hypotl(long double x, long double y)
|
|||||||
u_int32_t high,low;
|
u_int32_t high,low;
|
||||||
GET_LDOUBLE_WORDS(exp,high,low,b);
|
GET_LDOUBLE_WORDS(exp,high,low,b);
|
||||||
if((high|low)==0) return a;
|
if((high|low)==0) return a;
|
||||||
SET_LDOUBLE_WORDS(t1, 0x7ffd, 0, 0); /* t1=2^16382 */
|
SET_LDOUBLE_WORDS(t1, 0x7ffd, 0x80000000, 0); /* t1=2^16382 */
|
||||||
b *= t1;
|
b *= t1;
|
||||||
a *= t1;
|
a *= t1;
|
||||||
k -= 16382;
|
k -= 16382;
|
||||||
|
Reference in New Issue
Block a user