Exercise 2.13
(define (par1 r1 r2)
(div-interval (mul-interval r1 r2)
(add-interval r1 r2)))
(define (par2 r1 r2)
(let ((one (make-interval 1 1)))
(div-interval
one (add-interval (div-interval one r1)
(div-interval one r2)))))
(define (mul-interval x y)
(let ((cx (center x))
(cy (center y))
(px (/ (percent x) 100))
(py (/ (percent y) 100)))
(make-interval (* (- cx (* cx px)) (- cy (* cy py)))
(* (+ cx (* cx px)) (+ cy (* cy py))))))
(define r1 (make-interval 6.12 7.48))
(define r2 (make-interval 4.465 4.935))
(display-interval-tolerance (par1 r1 r2))
(display-interval-tolerance (par2 r1 r2))
; 执行结果
2.844199964577264 ± 22.613352145193332%
2.777440701636504 ± 7.05260392723452%
Exercise 2.14
(define r1 (make-interval 6.12 7.48))
(define r2 (make-interval 4.465 4.935))
(display-interval (div-interval r1 r1))
(display-interval (div-interval r1 r2))
(newline)
(display-interval-tolerance (div-interval r1 r1))
(display-interval-tolerance (div-interval r1 r2))
; 执行结果
[0.8181818181818182, 1.222222222222222]
[1.2401215805471126, 1.6752519596864504]
1.02020202020202 ± 19.801980198019795%
1.4576867701167815 ± 14.925373134328357%
Exercise 2.15
Exercise 2.16
(define a (make-interval 2 4))
(define b (make-interval -2 0))
(define c (make-interval 3 8))
(define x (mul-interval a (add-interval b c)))
(define y (add-interval (mul-interval a b)
(mul-interval a c)))
(display-interval x)
(display-interval y)
; 执行结果
[2, 32]
[-2, 32]