aboutsummaryrefslogtreecommitdiff
path: root/math/e_exp10l.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-04-30 09:37:01 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-04-30 09:37:01 +0000
commit9568c0c2255045456a09b441f89c6641e27a4bec (patch)
tree880b9ddc21a1bc83fbb5ec3af9c57db5365eef35 /math/e_exp10l.c
parent6c1ff08cf8734e77b9201d968ae8bbc0626d09a4 (diff)
downloadglibc-9568c0c2255045456a09b441f89c6641e27a4bec.zip
glibc-9568c0c2255045456a09b441f89c6641e27a4bec.tar.gz
glibc-9568c0c2255045456a09b441f89c6641e27a4bec.tar.bz2
Fix exp10 spurious overflows (bug 13924).
Diffstat (limited to 'math/e_exp10l.c')
-rw-r--r--math/e_exp10l.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/math/e_exp10l.c b/math/e_exp10l.c
index e3dad0a..d57c8cf 100644
--- a/math/e_exp10l.c
+++ b/math/e_exp10l.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -18,13 +18,16 @@
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
long double
__ieee754_exp10l (long double arg)
{
- /* This is a very stupid and inprecise implementation. It'll get
- replaced sometime (soon?). */
- return __ieee754_expl (M_LN10l * arg);
+ if (__finitel (arg) && arg < LDBL_MIN_10_EXP - LDBL_DIG - 10)
+ return LDBL_MIN * LDBL_MIN;
+ else
+ /* This is a very stupid and inprecise implementation. It'll get
+ replaced sometime (soon?). */
+ return __ieee754_expl (M_LN10l * arg);
}
strong_alias (__ieee754_exp10l, __exp10l_finite)