summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDirk Herrmann <dirk@dirk-herrmanns-seiten.de>2000-07-13 14:47:32 +0000
committerDirk Herrmann <dirk@dirk-herrmanns-seiten.de>2000-07-13 14:47:32 +0000
commit2238100586a99880885ac31c146a2397f2d579ff (patch)
tree5b97a57670795e98fd3a8d4f8c32be87b6408d91
parentc4da09e2ddc0f6cd2c63f4e68d75988fe7beceed (diff)
downloadguile-2238100586a99880885ac31c146a2397f2d579ff.tar.gz
* In expt, return exact results when possible.
-rw-r--r--ice-9/ChangeLog6
-rw-r--r--ice-9/boot-9.scm6
2 files changed, 10 insertions, 2 deletions
diff --git a/ice-9/ChangeLog b/ice-9/ChangeLog
index 6160c876e..5620222bc 100644
--- a/ice-9/ChangeLog
+++ b/ice-9/ChangeLog
@@ -1,3 +1,9 @@
+2000-07-13 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * boot-9.scm (expt): In case of negative integer exponents return
+ an exact result if the input paramters were exact. Thanks to
+ Mikael for the suggestion.
+
2000-07-12 Dirk Herrmann <D.Herrmann@tu-bs.de>
* boot-9.scm (expt): Make sure that integer-expt is only called
diff --git a/ice-9/boot-9.scm b/ice-9/boot-9.scm
index c1e578494..3735c7948 100644
--- a/ice-9/boot-9.scm
+++ b/ice-9/boot-9.scm
@@ -793,8 +793,10 @@
(define expt
(let ((integer-expt integer-expt))
(lambda (z1 z2)
- (cond ((and (integer? z2) (>= z2 0))
- (integer-expt z1 z2))
+ (cond ((integer? z2)
+ (if (>= z2 0)
+ (integer-expt z1 z2)
+ (/ 1 (integer-expt z1 (- z2)))))
((and (real? z2) (real? z1) (>= z1 0))
($expt z1 z2))
(else