]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Change exp() behavior to generate error on underflow rather
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 29 Nov 1998 01:59:00 +0000 (01:59 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 29 Nov 1998 01:59:00 +0000 (01:59 +0000)
than silently returning zero on some machines.  Correct float8 regress test
to agree.  Also fix pow() overflow/underflow check to work correctly on
HPUX.

src/backend/utils/adt/float.c
src/test/regress/expected/float8.out

index b1de92f643ee12fe6f108be49053d8160f02bda6..5dfa2dfbaddb8700162fcc0bb7007e5bd841fe50 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.33 1998/09/01 04:32:32 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.33.2.1 1998/11/29 01:58:59 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1041,7 +1041,7 @@ dpow(float64 arg1, float64 arg2)
 #endif
        *result = (float64data) pow(tmp1, tmp2);
 #ifndef finite
-       if (errno == ERANGE)
+       if (errno != 0)                 /* on some machines both EDOM & ERANGE can occur */
 #else
        if (!finite(*result))
 #endif
@@ -1074,7 +1074,8 @@ dexp(float64 arg1)
 #ifndef finite
        if (errno == ERANGE)
 #else
-       if (!finite(*result))
+       /* infinity implies overflow, zero implies underflow */
+       if (!finite(*result) || *result == 0.0)
 #endif
                elog(ERROR, "exp() result is out of range");
 
index ec9a98371f9caca07ab822b7c458d1811492c3ed..6434d8eb2616058a57186a361c9cc6e7dd971a2c 100644 (file)
@@ -195,15 +195,7 @@ ERROR:  can't take log of zero
 QUERY: SELECT '' AS bad, (; (f.f1)) from FLOAT8_TBL f where f.f1 < '0.0' ;
 ERROR:  can't take log of a negative number
 QUERY: SELECT '' AS bad, : (f.f1) from FLOAT8_TBL f;
-bad|            ?column?
----+--------------------
-   |                   1
-   |7.39912306090513e-16
-   |                   0
-   |                   0
-   |                   1
-(5 rows)
-
+ERROR:  exp() result is out of range
 QUERY: SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;
 ERROR:  float8div: divide by zero error
 QUERY: SELECT '' AS five, FLOAT8_TBL.*;