(mod fl1 fl2)) (define (fldiv0-and-mod0 fl1 fl2) (assert-iflonum fl1 fl2) (div0-and-mod0 fl1 fl2)) (define (fldiv0 fl1 fl2) (assert-iflonum fl1 fl2) (div0 fl1 fl2)) (define (flmod0 fl1 fl2) (assert-iflonum fl1 fl2) (mod0 fl1 fl2)) (define (flnumerator fl) (assert-flonum fl) (numerator fl)) (define (fldenominator fl) (assert-flonum fl) (denominator fl)) (define (flfloor fl) (assert-flonum fl) (floor fl)) (define (flceiling fl) (assert-flonum fl) (ceiling fl)) (define (fltruncate fl) (assert-flonum fl) (truncate fl)) (define (flround fl) (assert-flonum fl) (round fl)) (define (flexp fl) (assert-flonum fl) (exp fl)) (define fllog (case-lambda ((fl) (assert-flonum fl) ;; add 0.0 to fl, to change -0.0 to 0.0, ;; so that (fllog -0.0) will be -inf.0, not -inf.0+pi*i. (ensure-flonum (log (+ fl 0.0)))) ((fl fl2) (assert-flonum fl fl2) (ensure-flonum (/ (log (+ fl 0.0)) (log (+ fl2 0.0))))))) (define (flsin fl) (assert-flonum fl) (sin fl)) (define (flcos fl) (assert-flonum fl) (cos fl)) (define (fltan fl) (assert-flonum fl) (tan fl)) (define (flasin fl) (assert-flonum fl) (ensure-flonum (asin fl))) (define (flacos fl) (assert-flonum fl) (ensure-flonum (acos fl))) (define flatan (case-lambda ((fl) (assert-flonum fl) (atan fl)) ((fl fl2) (assert-flonum fl fl2) (atan fl fl2)))) (define (flsqrt fl) (assert-flonum fl) (ensure-flonum (sqrt fl))) (define (flexpt fl1 fl2) (assert-flonum fl1 fl2) (ensure-flonum (expt fl1 fl2))) (define-condition-type &no-infinities &implementation-restriction make-no-infinities-violation no-infinities-violation?) (define-condition-type &no-nans &implementation-restriction make-no-nans-violation no-nans-violation?) (define (fixnum->flonum fx) (or (fixnum? fx) (raise (make-assertion-violation))) (exact->inexact fx)) )