diff --git a/collects/tests/racket/number.rktl b/collects/tests/racket/number.rktl index c2c1e044de..2977faa22b 100644 --- a/collects/tests/racket/number.rktl +++ b/collects/tests/racket/number.rktl @@ -552,6 +552,8 @@ (test -0.0 expt -0.1 10000000000001.0) (test 0.0 expt -0.0 10000000000000.0) (test -0.0 expt -0.0 10000000000001.0) +(test 0.0 expt -10.0 -10000000000000.0) +(test -0.0 expt -10.0 -10000000000001.0) (err/rt-test (max 0 'a)) (err/rt-test (min 0 'a)) diff --git a/src/racket/src/number.c b/src/racket/src/number.c index 2ecec0860f..f2cf488fdc 100644 --- a/src/racket/src/number.c +++ b/src/racket/src/number.c @@ -2732,8 +2732,9 @@ static double sch_pow(double x, double y) double r; r = protected_pow(x, y); if ((r == 0.0) && !minus_zero_p(r)) { - /* check large odd power of a small negative number, + /* check zero result of a odd power of a negative number, which some libraries get wrong for some reason */ + if (y < 0) y = -y; if ((x < 0) && (fmod(y, 2.0) == 1.0)) { r = scheme_floating_point_nzero; }