diff options
Diffstat (limited to 'winsup/mingw/mingwex')
-rw-r--r-- | winsup/mingw/mingwex/math/sqrtf.c | 17 | ||||
-rw-r--r-- | winsup/mingw/mingwex/math/sqrtl.c | 18 |
2 files changed, 29 insertions, 6 deletions
diff --git a/winsup/mingw/mingwex/math/sqrtf.c b/winsup/mingw/mingwex/math/sqrtf.c index 55ca39dbe..b1029cad8 100644 --- a/winsup/mingw/mingwex/math/sqrtf.c +++ b/winsup/mingw/mingwex/math/sqrtf.c @@ -1,9 +1,20 @@ #include <math.h> +#include <errno.h> + +extern float __QNANF; float sqrtf (float x) { - float res; - asm ("fsqrt" : "=t" (res) : "0" (x)); - return res; + if (x < 0.0F ) + { + errno = EDOM; + return __QNANF; + } + else + { + float res; + asm ("fsqrt" : "=t" (res) : "0" (x)); + return res; + } } diff --git a/winsup/mingw/mingwex/math/sqrtl.c b/winsup/mingw/mingwex/math/sqrtl.c index 0bd301390..dba68d878 100644 --- a/winsup/mingw/mingwex/math/sqrtl.c +++ b/winsup/mingw/mingwex/math/sqrtl.c @@ -1,8 +1,20 @@ #include <math.h> +#include <errno.h> + +extern long double __QNANL; + long double sqrtl (long double x) { - long double res; - asm ("fsqrt" : "=t" (res) : "0" (x)); - return res; + if (x < 0.0L ) + { + errno = EDOM; + return __QNANL; + } + else + { + long double res; + asm ("fsqrt" : "=t" (res) : "0" (x)); + return res; + } } |