From f0f4a6d781b695e3b0c3f426ababf68e65d7bf5b Mon Sep 17 00:00:00 2001 From: Bruce Momjian 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 263a13a314..44fe89296e 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);