float-fix2.diff

text/plain

Filename: float-fix2.diff
Type: text/plain
Part: 1
Message: Re: Re: [GENERAL] +/- Inf for float8's

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: context
File+
backend/access/nbtree/nbtcompare.c 7 1
backend/utils/adt/float.c 13 3
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);
  }