diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index 0bf5ebff47..a00cef1bf1 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -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"); diff --git a/src/test/regress/expected/float8.out b/src/test/regress/expected/float8.out index ec9a98371f..6434d8eb26 100644 --- a/src/test/regress/expected/float8.out +++ b/src/test/regress/expected/float8.out @@ -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.*;