*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
#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
#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");
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.*;