]> granicus.if.org Git - postgresql/commitdiff
Apply fix so pow() and exp() ERANGE is used only if result is not 0.
authorBruce Momjian <bruce@momjian.us>
Sat, 6 Jan 2007 20:21:29 +0000 (20:21 +0000)
committerBruce Momjian <bruce@momjian.us>
Sat, 6 Jan 2007 20:21:29 +0000 (20:21 +0000)
src/backend/utils/adt/float.c

index 263a13a314842e7202d2a0decbc93783953df021..44fe89296e851a372f8dfa090b361ade085f3ae0 100644 (file)
@@ -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);