From: eck Date: Thu, 29 Mar 1990 09:05:21 +0000 (+0000) Subject: several bug fixes after test-suite X-Git-Tag: release-5-5~1765 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=34d54a20b140db929130501092d517d257e11b46;p=ack.git several bug fixes after test-suite --- diff --git a/lang/cem/libcc.ansi/math/exp.c b/lang/cem/libcc.ansi/math/exp.c index c5db4be0a..11a3ab693 100644 --- a/lang/cem/libcc.ansi/math/exp.c +++ b/lang/cem/libcc.ansi/math/exp.c @@ -38,11 +38,11 @@ exp(double x) if (x <= M_LN_MIN_D) { if (x < M_LN_MIN_D) errno = ERANGE; - return DBL_MIN; + return 0.0; } if (x >= M_LN_MAX_D) { if (x > M_LN_MAX_D) errno = ERANGE; - return DBL_MAX; + return HUGE_VAL; } if (negative) x = -x; diff --git a/lang/cem/libcc.ansi/math/ldexp.c b/lang/cem/libcc.ansi/math/ldexp.c index 4a48f1d5b..5ec83a8fd 100644 --- a/lang/cem/libcc.ansi/math/ldexp.c +++ b/lang/cem/libcc.ansi/math/ldexp.c @@ -5,6 +5,8 @@ /* $Header$ */ #include +#include +#include double ldexp(double fl, int exp) @@ -12,6 +14,7 @@ ldexp(double fl, int exp) int sign = 1; int currexp; + if (fl == 0.0) return 0.0; if (fl<0) { fl = -fl; sign = -1; @@ -19,6 +22,10 @@ ldexp(double fl, int exp) fl = frexp(fl,&currexp); exp += currexp; if (exp > 0) { + if (exp > DBL_MAX_EXP) { + errno = ERANGE; + return sign * HUGE_VAL; + } while (exp>30) { fl *= (double) (1L << 30); exp -= 30; @@ -26,6 +33,10 @@ ldexp(double fl, int exp) fl *= (double) (1L << exp); } else { + /* number need not be normalized */ + if (exp < DBL_MIN_EXP - DBL_MANT_DIG) { + return 0.0; + } while (exp<-30) { fl /= (double) (1L << 30); exp += 30;