diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index a00cef1bf1..ba6abbb247 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.35 1998/11/29 01:57:59 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.36 1999/01/10 17:13:06 thomas Exp $ * *------------------------------------------------------------------------- */ @@ -249,8 +249,17 @@ float8in(char *num) errno = 0; val = strtod(num, &endptr); - if (*endptr != '\0' || errno == ERANGE) - elog(ERROR, "Bad float8 input format '%s'", num); + if (*endptr != '\0') + { + if (strcasecmp(num, "NaN") == 0) + val = NAN; + else if (strcasecmp(num, "Infinity") == 0) + val = HUGE_VAL; + else if (errno == ERANGE) + elog(ERROR, "Input '%s' is out of range for float8", num); + else + elog(ERROR, "Bad float8 input format '%s'", num); + } CheckFloat8Val(val); *result = val;