From 6c89ae4f09418ba79c781deccf8cdbe3f6ba019c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 21 Aug 2008 19:50:28 +0000 Subject: [PATCH] fix more r6rs expt problems on 0 or 0.0 base svn: r11371 --- collects/rnrs/base-6.ss | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/collects/rnrs/base-6.ss b/collects/rnrs/base-6.ss index c16bab03f3..f44e68ecc5 100644 --- a/collects/rnrs/base-6.ss +++ b/collects/rnrs/base-6.ss @@ -302,12 +302,26 @@ [(n m) (/ (log n) (log m))])) (define (r6rs:expt base power) - (if (and (or (eq? base 0) - (eq? base 1)) - (number? power) - (inexact? power)) - (expt (exact->inexact base) power) - (expt base power))) + (cond + [(and (number? base) + (zero? base) + (number? power)) + (if (zero? power) + (if (and (eq? base 0) + (exact? power)) + 1 + 1.0) + (if (positive? (real-part power)) + (if (and (eq? base 0) + (exact? power)) + 0 + 0.0) + (expt base power)))] + [(and (eq? base 1) + (number? power) + (inexact? power)) + (expt (exact->inexact base) power)] + [else (expt base power)])) (define (r6rs:angle n) ; because `angle' produces exact 0 for reals: