|
29 | 29 | (define lo (ival-lo x)) |
30 | 30 | (define hi (ival-hi x)) |
31 | 31 | (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))) |
34 | 32 |
|
35 | 33 | (cond |
36 | 34 | ; x = [0.bf, 0.bf] |
|
39 | 37 | [(bfzero? lo) ; x = [0.bf, ...] |
40 | 38 | (cond |
41 | 39 | [(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))])] |
43 | 43 |
|
44 | 44 | [(bfzero? hi) ; x = [..., 0.bf] |
45 | 45 | (cond |
46 | 46 | [(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))])] |
48 | 50 |
|
49 | 51 | [(crosses-zero? x) ; x = [-..., +...] |
50 | 52 | (cond |
51 | 53 | ; x = [-inf, inf] |
52 | 54 | [(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))])] |
56 | 65 |
|
57 | 66 | [else ; doesn't cross zero |
58 | 67 | (cond |
59 | 68 | ; Can't both be inf, since: |
60 | 69 | ; - [inf, inf] not a valid interval |
61 | 70 | ; - [-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))])])) |
65 | 81 |
|
66 | 82 | (define (logspan x) |
67 | 83 | (match (*bumps-activated*) |
|
416 | 432 | ; ↓ampl[cosu]'x = ↓ampl[cosu]'n = 0 <-- maybe can be better |
417 | 433 | (define x (car srcs)) |
418 | 434 | (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)) |
421 | 437 | (list (cons (- maxlog-x n minlog-z -2) 0))] |
422 | 438 |
|
423 | 439 | [(ival-tanu) |
|
0 commit comments