* Added div, mod, div-and-mod, div0, mod0, div0-and-mod0.
This commit is contained in:
parent
9d8ceef99f
commit
ed45b486a3
BIN
src/ikarus.boot
BIN
src/ikarus.boot
Binary file not shown.
|
@ -2371,3 +2371,57 @@
|
||||||
(go x eps)]
|
(go x eps)]
|
||||||
[else (error who "~s is not a number" eps)])]
|
[else (error who "~s is not a number" eps)])]
|
||||||
[else (error who "~s is not a number" x)])))
|
[else (error who "~s is not a number" x)])))
|
||||||
|
|
||||||
|
|
||||||
|
(library (ikarus r6rs-fu div/mod)
|
||||||
|
(export div mod div-and-mod div0 mod0 div0-and-mod0)
|
||||||
|
(import
|
||||||
|
(except (ikarus)
|
||||||
|
div mod div-and-mod div0 mod0 div0-and-mod0))
|
||||||
|
|
||||||
|
(define (div-and-mod x y)
|
||||||
|
(define who 'div-and-mod)
|
||||||
|
(unless (integer? x)
|
||||||
|
(error who "~s is not an integer" x))
|
||||||
|
(unless (and (integer? y) (not (= y 0)))
|
||||||
|
(error who "~s is not an integer" y))
|
||||||
|
(if (> x 0)
|
||||||
|
(quotient+remainder x y)
|
||||||
|
(if (> y 0)
|
||||||
|
(let-values ([(q r) (quotient+remainder (- x y) y)])
|
||||||
|
(values q (+ r y)))
|
||||||
|
(let-values ([(q r) (quotient+remainder (+ x y) y)])
|
||||||
|
(values q (- r y))))))
|
||||||
|
|
||||||
|
(define (div x y)
|
||||||
|
(let-values ([(n m) (div-and-mod x y)])
|
||||||
|
n))
|
||||||
|
|
||||||
|
(define (mod x y)
|
||||||
|
(let-values ([(n m) (div-and-mod x y)])
|
||||||
|
m))
|
||||||
|
|
||||||
|
(define (div0-and-mod0 x y)
|
||||||
|
(define who 'div0-and-mod0)
|
||||||
|
(unless (integer? x)
|
||||||
|
(error who "~s is not an integer" x))
|
||||||
|
(unless (and (integer? y) (not (= y 0)))
|
||||||
|
(error who "~s is not an integer" y))
|
||||||
|
(let-values ([(d m) (div-and-mod x y)])
|
||||||
|
(if (> y 0)
|
||||||
|
(if (< m (/ y 2))
|
||||||
|
(values d m)
|
||||||
|
(values (+ d 1) (- m y)))
|
||||||
|
(if (> m (/ y -2))
|
||||||
|
(values (- d 1) (+ m y))
|
||||||
|
(values d m)))))
|
||||||
|
|
||||||
|
(define (div0 x y)
|
||||||
|
(let-values ([(n m) (div0-and-mod0 x y)])
|
||||||
|
n))
|
||||||
|
|
||||||
|
(define (mod0 x y)
|
||||||
|
(let-values ([(n m) (div0-and-mod0 x y)])
|
||||||
|
m)))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -530,6 +530,12 @@
|
||||||
[modulo i r]
|
[modulo i r]
|
||||||
[remainder i r]
|
[remainder i r]
|
||||||
[quotient+remainder i r]
|
[quotient+remainder i r]
|
||||||
|
[div i]
|
||||||
|
[mod i]
|
||||||
|
[div-and-mod i]
|
||||||
|
[div0 i]
|
||||||
|
[mod0 i]
|
||||||
|
[div0-and-mod0 i]
|
||||||
[number->string i r]
|
[number->string i r]
|
||||||
[string->number i r]
|
[string->number i r]
|
||||||
[flonum->string i]
|
[flonum->string i]
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
(tests reader)
|
(tests reader)
|
||||||
(tests bytevectors)
|
(tests bytevectors)
|
||||||
(tests strings)
|
(tests strings)
|
||||||
|
(tests numbers)
|
||||||
(tests bignum-to-flonum)
|
(tests bignum-to-flonum)
|
||||||
(tests string-to-number))
|
(tests string-to-number))
|
||||||
|
|
||||||
|
@ -26,4 +27,5 @@
|
||||||
(test-exact-integer-sqrt)
|
(test-exact-integer-sqrt)
|
||||||
(test-bignum-to-flonum)
|
(test-bignum-to-flonum)
|
||||||
(test-string-to-number)
|
(test-string-to-number)
|
||||||
|
(test-div-and-mod)
|
||||||
(printf "Happy Happy Joy Joy\n")
|
(printf "Happy Happy Joy Joy\n")
|
||||||
|
|
|
@ -134,10 +134,12 @@
|
||||||
[cons C ba se]
|
[cons C ba se]
|
||||||
[cos C ba se]
|
[cos C ba se]
|
||||||
[denominator C ba se]
|
[denominator C ba se]
|
||||||
[div S ba]
|
[div C ba]
|
||||||
[div-and-mod S ba]
|
[mod C ba]
|
||||||
[div0 S ba]
|
[div-and-mod C ba]
|
||||||
[div0-and-mod0 S ba]
|
[div0 C ba]
|
||||||
|
[mod0 C ba]
|
||||||
|
[div0-and-mod0 C ba]
|
||||||
[dynamic-wind C ba se]
|
[dynamic-wind C ba se]
|
||||||
[eq? C ba se]
|
[eq? C ba se]
|
||||||
[equal? S ba se]
|
[equal? S ba se]
|
||||||
|
@ -177,8 +179,6 @@
|
||||||
[map C ba se]
|
[map C ba se]
|
||||||
[max C ba se]
|
[max C ba se]
|
||||||
[min C ba se]
|
[min C ba se]
|
||||||
[mod S ba]
|
|
||||||
[mod0 S ba]
|
|
||||||
[nan? S ba]
|
[nan? S ba]
|
||||||
[negative? C ba se]
|
[negative? C ba se]
|
||||||
[not C ba se]
|
[not C ba se]
|
||||||
|
|
Loading…
Reference in New Issue