32 lines
811 B
C
32 lines
811 B
C
#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;
|
|
}
|
|
|
|
|