From 3be772cadc2919733d05ee7b41da4d97d013ba05 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 29 Nov 1998 01:59:00 +0000 Subject: 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. --- src/backend/utils/adt/float.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/backend/utils/adt/float.c') diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index b1de92f643e..5dfa2dfbadd 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.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"); -- cgit v1.2.3