File tree Expand file tree Collapse file tree
math-lib/math/private/flonum Expand file tree Collapse file tree Original file line number Diff line number Diff line change 9999 (: flprev (Flonum -> Flonum))
100100 (define (flprev x) (flstep x -1 ))
101101
102- (: flonums-between (Flonum Flonum -> Integer))
103- (define (flonums-between x y)
104- (- (flonum->ordinal y) (flonum->ordinal x)))
105-
106102 ) ; begin-encourage-inline
103+
104+ (: flonum->chunks (-> Flonum (Values Integer Integer)))
105+ (define (flonum->chunks x)
106+ (define neg? (fl< x 0.0 ))
107+ (define ax (flabs x))
108+ (if neg?
109+ (values (- (flbit-field ax 0 32 )) (- (flbit-field ax 32 64 )))
110+ (values (flbit-field ax 0 32 ) (flbit-field ax 32 64 ))))
111+
112+ (: flonums-between (Flonum Flonum -> Integer))
113+ (define (flonums-between x y)
114+ (define-values (xlo xhi) (flonum->chunks x))
115+ (define-values (ylo yhi) (flonum->chunks y))
116+ (+ (arithmetic-shift (- yhi xhi) 32 ) (- ylo xlo)))
107117
108118(: flulp (Flonum -> (U Flonum-Nan Nonnegative-Flonum)))
109119(define (flulp x)
Original file line number Diff line number Diff line change 144144 (check-equal? (flulp-error x (flnext x)) 1.0
145145 (format "x = ~a " x)))
146146
147+ (for ([_ (in-range 1000 )])
148+ (define x (ordinal->flonum (random-integer (flonum->ordinal -inf.0 ) (flonum->ordinal +inf.0 ))))
149+ (define y (ordinal->flonum (random-integer (flonum->ordinal -inf.0 ) (flonum->ordinal +inf.0 ))))
150+ (check-equal? (flonums-between x y)
151+ (- (flonum->ordinal y) (flonum->ordinal x))))
152+
147153;; ===================================================================================================
148154;; fllog2
149155
You can’t perform that action at this time.
0 commit comments