diff --git a/libs/libc/stdlib/lib_strtod.c b/libs/libc/stdlib/lib_strtod.c index fe8e48ff4b1..529bf9d1c64 100644 --- a/libs/libc/stdlib/lib_strtod.c +++ b/libs/libc/stdlib/lib_strtod.c @@ -71,7 +71,12 @@ static inline int is_real(double x) { - const double infinite = 1.0 / 0.0; + /* NOTE: Windows MSVC restrictions, MSVC doesn't allow division through a + * zero literal, but allows it through non-const variable set to zero + */ + + const double divzero = 0.0; + const double infinite = 1.0 / divzero; return (x < infinite) && (x >= -infinite); } @@ -101,7 +106,13 @@ double strtod(FAR const char *str, FAR char **endptr) int n; int num_digits; int num_decimals; - const double infinite = 1.0 / 0.0; + + /* NOTE: Windows MSVC restrictions, MSVC doesn't allow division through a + * zero literal, but allows it through non-const variable set to zero + */ + + const double divzero = 0.0; + const double infinite = 1.0 / divzero; /* Skip leading whitespace */ diff --git a/libs/libc/stdlib/lib_strtold.c b/libs/libc/stdlib/lib_strtold.c index cd569561d2d..a043412d04c 100644 --- a/libs/libc/stdlib/lib_strtold.c +++ b/libs/libc/stdlib/lib_strtold.c @@ -71,7 +71,12 @@ static inline int is_real(long double x) { - const long double infinite = 1.0L / 0.0L; + /* NOTE: Windows MSVC restrictions, MSVC doesn't allow division through a + * zero literal, but allows it through non-const variable set to zero + */ + + const long double divzero = 0.0L; + const long double infinite = 1.0L / divzero; return (x < infinite) && (x >= -infinite); } @@ -101,7 +106,13 @@ long double strtold(FAR const char *str, FAR char **endptr) int n; int num_digits; int num_decimals; - const long double infinite = 1.0L / 0.0L; + + /* NOTE: Windows MSVC restrictions, MSVC doesn't allow division through a + * zero literal, but allows it through non-const variable set to zero + */ + + const long double divzero = 0.0L; + const long double infinite = 1.0L / divzero; /* Skip leading whitespace */