/* The native strtod() may not get all the possible
* inf/nan strings PEEK_INFNAN() recognizes. */
char* endp;
- NV nv = strtod(p, &endp);
+ NV nv = Perl_strtod(p, &endp);
if (p != endp) {
*value = nv;
return endp;
#endif /* !USE_LOCALE_NUMERIC */
+#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+# if defined(HAS_STRTOLD)
+# define Perl_strtod(s, e) strtold(s, e)
+# elif defined(HAS_STRTOD)
+# define Perl_strtod(s, e) (NV)strtod(s, e) /* Unavoidable loss. */
+# endif
+#elif defined(HAS_STRTOD)
+# define Perl_strtod(s, e) strtod(s, e)
+#endif
+
#if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && \
(QUADKIND == QUAD_IS_LONG_LONG || QUADKIND == QUAD_IS___INT64)
# ifdef __hpux