Fix x ^ integer precission case. git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@4067 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-crt/math/pow.def.h b/mingw-w64-crt/math/pow.def.h index 8a08508..3dbad96 100644 --- a/mingw-w64-crt/math/pow.def.h +++ b/mingw-w64-crt/math/pow.def.h
@@ -68,6 +68,9 @@ */ #include "../complex/complex_internal.h" #include <errno.h> +#include <limits.h> + +__FLT_TYPE __cdecl __FLT_ABI(__powi) (__FLT_TYPE x, int n); __FLT_TYPE __cdecl __FLT_ABI(pow) (__FLT_TYPE x, __FLT_TYPE y) @@ -154,6 +157,8 @@ __FLT_RPT_DOMAIN ("pow", x, y, -__FLT_NAN); return -__FLT_NAN; } + if (__FLT_ABI (modf) (y, &d) == 0.0 && (d <= (__FLT_TYPE) INT_MAX && d >= (__FLT_TYPE) INT_MIN)) + return __FLT_ABI (__powi) (x, (int) y); /* As exp already checks for minlog and maxlog no further checks are necessary. */ rslt = __FLT_ABI(exp)(y * __FLT_ABI(log)(__FLT_ABI(fabs) (x))); if (signbit (x) && __FLT_ABI (modf) (__FLT_ABI (ldexp) (y, -1), &d) != 0.0)