Index: backend/access/nbtree/nbtcompare.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v retrieving revision 1.39 diff -c -r1.39 nbtcompare.c *** backend/access/nbtree/nbtcompare.c 2000/07/12 02:36:48 1.39 --- backend/access/nbtree/nbtcompare.c 2000/08/21 16:22:23 *************** *** 105,111 **** float8 a = PG_GETARG_FLOAT8(0); float8 b = PG_GETARG_FLOAT8(1); ! if (a > b) PG_RETURN_INT32(1); else if (a == b) PG_RETURN_INT32(0); --- 105,117 ---- float8 a = PG_GETARG_FLOAT8(0); float8 b = PG_GETARG_FLOAT8(1); ! if (isnan(a)) ! { if (isnan(b)) ! PG_RETURN_INT32(0); ! else ! PG_RETURN_INT32(1); ! } ! else if (a > b) PG_RETURN_INT32(1); else if (a == b) PG_RETURN_INT32(0); Index: backend/utils/adt/float.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/float.c,v retrieving revision 1.68 diff -c -r1.68 float.c *** backend/utils/adt/float.c 2000/08/07 00:51:14 1.68 --- backend/utils/adt/float.c 2000/08/21 16:22:24 *************** *** 248,253 **** --- 248,255 ---- val = NAN; else if (strcasecmp(num, "Infinity") == 0) val = HUGE_VAL; + else if (strcasecmp(num, "-Infinity") == 0) + val = -HUGE_VAL; else elog(ERROR, "Bad float8 input format '%s'", num); } *************** *** 272,283 **** { float8 num = PG_GETARG_FLOAT8(0); char *ascii = (char *) palloc(MAXDOUBLEWIDTH + 1); if (isnan(num)) PG_RETURN_CSTRING(strcpy(ascii, "NaN")); ! if (isinf(num)) ! PG_RETURN_CSTRING(strcpy(ascii, "Infinity")); ! sprintf(ascii, "%.*g", DBL_DIG, num); PG_RETURN_CSTRING(ascii); } --- 274,291 ---- { float8 num = PG_GETARG_FLOAT8(0); char *ascii = (char *) palloc(MAXDOUBLEWIDTH + 1); + int inf; if (isnan(num)) PG_RETURN_CSTRING(strcpy(ascii, "NaN")); ! inf = isinf(num); ! if (inf != 0) ! { ! if (inf < 0) ! PG_RETURN_CSTRING(strcpy(ascii, "-Infinity")); ! else ! PG_RETURN_CSTRING(strcpy(ascii, "Infinity")); ! } sprintf(ascii, "%.*g", DBL_DIG, num); PG_RETURN_CSTRING(ascii); } *************** *** 614,619 **** --- 622,628 ---- float8 arg1 = PG_GETARG_FLOAT8(0); float8 arg2 = PG_GETARG_FLOAT8(1); + if (isnan(arg2)) PG_RETURN_BOOL(1); PG_RETURN_BOOL(arg1 < arg2); } *************** *** 632,637 **** --- 641,647 ---- float8 arg1 = PG_GETARG_FLOAT8(0); float8 arg2 = PG_GETARG_FLOAT8(1); + if (isnan(arg2)) PG_RETURN_BOOL(1); PG_RETURN_BOOL(arg1 > arg2); }