Some platforms set errno on pow(), exp() overflow, some do not, so if
authorBruce Momjian <bruce@momjian.us>
Tue, 2 Jan 2007 22:19:42 +0000 (22:19 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 2 Jan 2007 22:19:42 +0000 (22:19 +0000)
isinf(), fall through to our own infinity checks.

src/backend/utils/adt/float.c

index 48b5fe878c57b10d1e702b50874f7cb92ef7cb5d..dab6c35667f6dbaf7381d5fb2dbb906321d42835 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.134 2007/01/02 21:25:50 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.135 2007/01/02 22:19:42 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1444,7 +1444,7 @@ dpow(PG_FUNCTION_ARGS)
         */
        errno = 0;
        result = pow(arg1, arg2);
-       if (errno != 0)
+       if (errno != 0 && !isinf(result))
                ereport(ERROR,
                                (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
                                 errmsg("result is out of range")));
@@ -1469,7 +1469,7 @@ dexp(PG_FUNCTION_ARGS)
         */
        errno = 0;
        result = exp(arg1);
-       if (errno != 0)
+       if (errno != 0 && !isinf(result))
                ereport(ERROR,
                                (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
                                 errmsg("result is out of range")));