Change exp() behavior to generate error on underflow rather
authorTom Lane
Sun, 29 Nov 1998 01:57:59 +0000 (01:57 +0000)
committerTom Lane
Sun, 29 Nov 1998 01:57:59 +0000 (01:57 +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 0bf5ebff472efa6cd8834ce48fd67b563c7347cd..a00cef1bf19c8277c130707007cd0cc53c98c408 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.34 1998/11/17 14:36:44 thomas Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.35 1998/11/29 01:57:59 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1131,7 +1131,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
@@ -1164,7 +1164,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.*;