From: Chris Hanson Date: Wed, 10 Jul 1991 20:06:18 +0000 (+0000) Subject: Handle (/ 0 X) specially to guarantee that result is exact zero even X-Git-Tag: 20090517-FFI~10472 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=c3633079a9e13fde56b4d1d0dc4908feca41bb78;p=mit-scheme.git Handle (/ 0 X) specially to guarantee that result is exact zero even when X is inexact. --- diff --git a/v7/src/runtime/arith.scm b/v7/src/runtime/arith.scm index 3e13496d1..0913afefe 100644 --- a/v7/src/runtime/arith.scm +++ b/v7/src/runtime/arith.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/arith.scm,v 1.20 1991/05/06 18:08:24 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/arith.scm,v 1.21 1991/07/10 20:06:18 cph Exp $ Copyright (c) 1989-91 Massachusetts Institute of Technology @@ -789,7 +789,6 @@ MIT in each case. |# (,rat:op X Y))))))) (define-standard-binary real:+ flo:+ (copy rat:+)) (define-standard-binary real:- flo:- (copy rat:-)) - (define-standard-binary real:/ flo:/ (copy rat:/)) (define-standard-binary real:rationalize flo:rationalize rat:rationalize) @@ -847,6 +846,11 @@ MIT in each case. |# ((rat:zero? x) x) ((flonum? y) (flo:* (rat:->flonum x) y)) (else ((copy rat:*) x y)))) + +(define (real:/ x y) + (cond ((flonum? x) (flo:/ x (if (flonum? y) y (rat:->flonum y)))) + ((flonum? y) (if (rat:zero? x) x (flo:/ (rat:->flonum x) y))) + (else ((copy rat:/) x y)))) (define (real:even? n) ((copy int:even?)