From f0f4a6d781b695e3b0c3f426ababf68e65d7bf5b Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Sat, 6 Jan 2007 20:21:29 +0000
Subject: [PATCH] Apply fix so pow() and exp() ERANGE is used only if result is
 not 0.

---
 src/backend/utils/adt/float.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c
index 263a13a3148..44fe89296e8 100644
--- a/src/backend/utils/adt/float.c
+++ b/src/backend/utils/adt/float.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.145 2007/01/06 15:18:02 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.146 2007/01/06 20:21:29 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1459,7 +1459,7 @@ dpow(PG_FUNCTION_ARGS)
 		else
 			result = 1;
 	}
-	else if (errno == ERANGE && !isinf(result))
+	else if (errno == ERANGE && result != 0 && !isinf(result))
 		result = get_float8_infinity();
 	
 	CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), arg1 == 0);
@@ -1478,7 +1478,7 @@ dexp(PG_FUNCTION_ARGS)
 
 	errno = 0;
 	result = exp(arg1);
-	if (errno == ERANGE && !isinf(result))
+	if (errno == ERANGE && result != 0 && !isinf(result))
 		result = get_float8_infinity();
 
 	CHECKFLOATVAL(result, isinf(arg1), false);
-- 
GitLab