Skip to content

Commit 1e09bf8

Browse files
committed
It thinks this fixed a bug, I'm not convinced
1 parent 4eba614 commit 1e09bf8

File tree

1 file changed

+28
-12
lines changed

1 file changed

+28
-12
lines changed

eval/tricks.rkt

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
(define lo (ival-lo x))
3030
(define hi (ival-hi x))
3131
(define slack (get-slack iter))
32-
(define exp-lo (and (not (bfinfinite? lo)) (not (bfzero? lo)) (mpfr-exp lo)))
33-
(define exp-hi (and (not (bfinfinite? hi)) (not (bfzero? hi)) (mpfr-exp hi)))
3432

3533
(cond
3634
; x = [0.bf, 0.bf]
@@ -39,29 +37,47 @@
3937
[(bfzero? lo) ; x = [0.bf, ...]
4038
(cond
4139
[(bfinfinite? hi) (values (- slack) (+ slack))]
42-
[else (values (- (min exp-hi 0) slack) (+ (max exp-hi 0) slack))])]
40+
[else
41+
(define exp-hi (mpfr-exp hi))
42+
(values (- (min exp-hi 0) slack) (+ (max exp-hi 0) slack))])]
4343

4444
[(bfzero? hi) ; x = [..., 0.bf]
4545
(cond
4646
[(bfinfinite? lo) (values (- slack) (+ slack))]
47-
[else (values (- (min exp-lo 0) slack) (+ (max exp-lo 0) slack))])]
47+
[else
48+
(define exp-lo (mpfr-exp lo))
49+
(values (- (min exp-lo 0) slack) (+ (max exp-lo 0) slack))])]
4850

4951
[(crosses-zero? x) ; x = [-..., +...]
5052
(cond
5153
; x = [-inf, inf]
5254
[(and (bfinfinite? hi) (bfinfinite? lo)) (values (- slack) slack)]
53-
[(bfinfinite? hi) (values (- (min exp-lo 0) slack) (+ (max exp-lo 0) slack))]
54-
[(bfinfinite? lo) (values (- (min exp-hi 0) slack) (+ (max exp-hi 0) slack))]
55-
[else (values (- (min exp-lo exp-hi 0) slack) (+ (max exp-lo exp-hi) 1))])]
55+
[(bfinfinite? hi)
56+
(define exp-lo (mpfr-exp lo))
57+
(values (- (min exp-lo 0) slack) (+ (max exp-lo 0) slack))]
58+
[(bfinfinite? lo)
59+
(define exp-hi (mpfr-exp hi))
60+
(values (- (min exp-hi 0) slack) (+ (max exp-hi 0) slack))]
61+
[else
62+
(define exp-lo (mpfr-exp lo))
63+
(define exp-hi (mpfr-exp hi))
64+
(values (- (min exp-lo exp-hi 0) slack) (+ (max exp-lo exp-hi) 1))])]
5665

5766
[else ; doesn't cross zero
5867
(cond
5968
; Can't both be inf, since:
6069
; - [inf, inf] not a valid interval
6170
; - [-inf, inf] crosses zero
62-
[(bfinfinite? lo) (values exp-hi (+ (max exp-hi 0) slack))]
63-
[(bfinfinite? hi) (values exp-lo (+ (max exp-lo 0) slack))]
64-
[else (values (min exp-lo exp-hi) (+ (max exp-lo exp-hi) 1))])]))
71+
[(bfinfinite? lo)
72+
(define exp-hi (mpfr-exp hi))
73+
(values exp-hi (+ (max exp-hi 0) slack))]
74+
[(bfinfinite? hi)
75+
(define exp-lo (mpfr-exp lo))
76+
(values exp-lo (+ (max exp-lo 0) slack))]
77+
[else
78+
(define exp-lo (mpfr-exp lo))
79+
(define exp-hi (mpfr-exp hi))
80+
(values (min exp-lo exp-hi) (+ (max exp-lo exp-hi) 1))])]))
6581

6682
(define (logspan x)
6783
(match (*bumps-activated*)
@@ -416,8 +432,8 @@
416432
; ↓ampl[cosu]'x = ↓ampl[cosu]'n = 0 <-- maybe can be better
417433
(define x (car srcs))
418434
(define n (cdr srcs)) ; n is already a floor(log(n))
419-
(define-values (_ maxlog-x) (minmaxlog x))
420-
(define-values (minlog-z _) (minmaxlog z))
435+
(define-values (minlog-x maxlog-x) (minmaxlog x))
436+
(define-values (minlog-z maxlog-z) (minmaxlog z))
421437
(list (cons (- maxlog-x n minlog-z -2) 0))]
422438

423439
[(ival-tanu)

0 commit comments

Comments
 (0)