From c81cdb47b916a151284926e6616e82b3062b7fe9 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 3 Mar 2006 14:34:30 +0000 Subject: [PATCH] fix expt on negative powers of -inf.0 and +inf.0 svn: r2355 --- src/mzscheme/src/number.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/mzscheme/src/number.c b/src/mzscheme/src/number.c index d91d19fa14..56f75b253f 100644 --- a/src/mzscheme/src/number.c +++ b/src/mzscheme/src/number.c @@ -1857,16 +1857,30 @@ static double sch_pow(double x, double y) } else if (MZ_IS_POS_INFINITY(x)) { if (y == 0.0) return 1.0; + else if (y < 0) + return 0.0; else return scheme_infinity_val; } else if (MZ_IS_NEG_INFINITY(x)) { if (y == 0.0) return 1.0; else { - if (fmod(y, 2.0) == 1.0) - return scheme_minus_infinity_val; - else - return scheme_infinity_val; + int neg = 0; + if (y < 0) { + neg = 1; + y = -y; + } + if (fmod(y, 2.0) == 1.0) { + if (neg) + return scheme_floating_point_nzero; + else + return scheme_minus_infinity_val; + } else { + if (neg) + return 0.0; + else + return scheme_infinity_val; + } } } else return pow(x, y);