mirror of https://github.com/postgres/postgres
Change exp() behavior to generate error on underflow rather
than silently returning zero on some machines. Correct float8 regress test to agree. Also fix pow() overflow/underflow check to work correctly on HPUX.
This commit is contained in:
parent
67531c42bd
commit
92eacaf523
|
@ -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");
|
||||
|
||||
|
|
|
@ -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.*;
|
||||
|
|
Loading…
Reference in New Issue