summaryrefslogtreecommitdiff
path: root/libc/math/w_exp2.c
diff options
context:
space:
mode:
Diffstat (limited to 'libc/math/w_exp2.c')
-rw-r--r--libc/math/w_exp2.c28
1 files changed, 9 insertions, 19 deletions
diff --git a/libc/math/w_exp2.c b/libc/math/w_exp2.c
index 446e5ea91..bf223265c 100644
--- a/libc/math/w_exp2.c
+++ b/libc/math/w_exp2.c
@@ -4,30 +4,20 @@
#include <float.h>
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
-static const double o_threshold= (double) DBL_MAX_EXP;
-static const double u_threshold= (double) (DBL_MIN_EXP - DBL_MANT_DIG - 1);
+static const double o_threshold = (double) DBL_MAX_EXP;
+static const double u_threshold = (double) (DBL_MIN_EXP - DBL_MANT_DIG - 1);
double
-__exp2 (double x) /* wrapper exp2 */
+__exp2 (double x)
{
-#ifdef _IEEE_LIBM
+ if (__builtin_expect (x <= u_threshold || x > o_threshold, 0)
+ && _LIB_VERSION != _IEEE_ && __finite (x))
+ /* exp2 overflow: 44, exp2 underflow: 45 */
+ return __kernel_standard (x, x, 44 + (x <= o_threshold));
+
return __ieee754_exp2 (x);
-#else
- double z;
- z = __ieee754_exp2 (x);
- if (_LIB_VERSION != _IEEE_ && __finite (x))
- {
- if (x > o_threshold)
- /* exp2 overflow */
- return __kernel_standard (x, x, 44);
- else if (x <= u_threshold)
- /* exp2 underflow */
- return __kernel_standard (x, x, 45);
- }
- return z;
-#endif
}
weak_alias (__exp2, exp2)
#ifdef NO_LONG_DOUBLE