Handle "NaN" and "Infinity" for input values.
authorThomas G. Lockhart
Sun, 10 Jan 1999 17:13:06 +0000 (17:13 +0000)
committerThomas G. Lockhart
Sun, 10 Jan 1999 17:13:06 +0000 (17:13 +0000)
I think NAN is already guaranteed to be there from Jan's work on NUMERIC,
 but perhaps HUGE_VAL needs some #ifndef's in the same place.
Should also include "-Infinity" as -HUGE_VAL sometime; not there yet.

src/backend/utils/adt/float.c

index a00cef1bf19c8277c130707007cd0cc53c98c408..ba6abbb247c545f5e261ed276450f4a3e3ccd5e6 100644 (file)
@@ -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;