Fixed bug in (mod 3 5/6).
This commit is contained in:
parent
ce496aebaf
commit
48a86cbaa3
|
@ -2776,9 +2776,14 @@
|
||||||
[(or (fixnum? x) (bignum? x))
|
[(or (fixnum? x) (bignum? x))
|
||||||
(values x 0)]
|
(values x 0)]
|
||||||
[else
|
[else
|
||||||
(let-values ([(a b)
|
(let ([n0 (numerator x)] [d0 (denominator x)])
|
||||||
(int-div-and-mod (numerator x) (denominator x))])
|
(let ([q (quotient n0 d0)])
|
||||||
(values a (/ b m)))])))
|
(let ([r (- n (* q m))])
|
||||||
|
(if (>= r 0)
|
||||||
|
(values q r)
|
||||||
|
(if (> m 0)
|
||||||
|
(values (- q 1) (+ r m))
|
||||||
|
(values (+ q 1) (- r m)))))))])))
|
||||||
(cond
|
(cond
|
||||||
[(fixnum? m)
|
[(fixnum? m)
|
||||||
(cond
|
(cond
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
1416
|
1418
|
||||||
|
|
|
@ -28,7 +28,22 @@
|
||||||
(test +10 +4)
|
(test +10 +4)
|
||||||
(test +10 -4)
|
(test +10 -4)
|
||||||
(test -10 +4)
|
(test -10 +4)
|
||||||
(test -10 -4))
|
(test -10 -4)
|
||||||
|
|
||||||
|
(test +3 +5/6)
|
||||||
|
(test -3 +5/6)
|
||||||
|
(test +3 -5/6)
|
||||||
|
(test -3 -5/6)
|
||||||
|
|
||||||
|
(test +3 +7/11)
|
||||||
|
(test -3 +7/11)
|
||||||
|
(test +3 -7/11)
|
||||||
|
(test -3 -7/11)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
(define (test-div0-and-mod0)
|
(define (test-div0-and-mod0)
|
||||||
|
|
|
@ -32,9 +32,9 @@
|
||||||
ikptr
|
ikptr
|
||||||
ikrt_io_error(){
|
ikrt_io_error(){
|
||||||
int err = errno;
|
int err = errno;
|
||||||
#if 0
|
//#if 0
|
||||||
fprintf(stderr, "errno=%d %s\n", err, strerror(err));
|
fprintf(stderr, "errno=%d %s\n", err, strerror(err));
|
||||||
#endif
|
//#endif
|
||||||
switch(err){
|
switch(err){
|
||||||
case EBADF : return fix(-2);
|
case EBADF : return fix(-2);
|
||||||
case EINTR : return fix(-3);
|
case EINTR : return fix(-3);
|
||||||
|
|
Loading…
Reference in New Issue