|  | #include <stdio.h> | 
|  | #include <float.h> | 
|  | #include <errno.h> | 
|  | #include <math.h> | 
|  |  | 
|  | extern long double __cdecl | 
|  | __mingw_wcstold (const wchar_t * __restrict__ _Str, wchar_t ** __restrict__ _EndPtr); | 
|  |  | 
|  | double __cdecl | 
|  | __mingw_wcstod (const wchar_t * __restrict__ _Str, wchar_t ** __restrict__ _EndPtr); | 
|  |  | 
|  | double __cdecl | 
|  | __mingw_wcstod (const wchar_t * __restrict__ _Str, wchar_t ** __restrict__ _EndPtr) | 
|  | { | 
|  | long double ret = __mingw_wcstold (_Str, _EndPtr); | 
|  | if (isfinite(ret)) { | 
|  | /* Check for cases that aren't out of range for long doubles, but that are | 
|  | * for doubles. */ | 
|  | if (ret > DBL_MAX) | 
|  | errno = ERANGE; | 
|  | else if (ret < -DBL_MAX) | 
|  | errno = ERANGE; | 
|  | else if (ret > 0 && ret < DBL_MIN) | 
|  | errno = ERANGE; | 
|  | else if (ret < 0 && ret > -DBL_MIN) | 
|  | errno = ERANGE; | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  |