Skip to content

Commit a8192f9

Browse files
authored
Merge pull request #2 from bksaiki/fix-ordinal
Fix ordinal (again)
2 parents 8f67534 + 9ce3eb6 commit a8192f9

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

private/mpfr.rkt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@
124124
(bf mbits expmin)]
125125
[else ; normal number
126126
(define c (+ (expt 2 msize) mbits))
127-
(define exp (sub1 (+ ebits expmin)))
127+
(define exp (+ (sub1 ebits) expmin))
128128
(bf c exp)])])))
129129

130130
(define (mpfr->ordinal x es sig)
@@ -135,13 +135,14 @@
135135
[(bfnan? x) (add1 (infinite-ordinal es sig))]
136136
[(bfinfinite? x) (infinite-ordinal es sig)]
137137
[else
138-
(define-values (c exp*) (bigfloat->sig+exp x))
139-
(define exp (+ exp* (bigfloat-precision x)))
138+
(define-values (c exp) (bigfloat->sig+exp x))
139+
(define e (+ exp (bigfloat-precision x) -1))
140140
(define expmin (sub1 (mpfr-get-emin)))
141+
(define emin (+ expmin sig -1))
141142
(cond
142-
[(< exp expmin) ; subnormal
143-
(define shift (- expmin exp))
144-
(arithmetic-shift c (- shift))]
143+
[(< e emin) ; subnormal
144+
(define shift (- exp expmin))
145+
(arithmetic-shift c shift)]
145146
[else ; normal
146147
(define ebits (add1 (- exp expmin)))
147148
(define mbits (bitwise-and c (sub1 (expt 2 (sub1 sig)))))

0 commit comments

Comments
 (0)