問題 2.9
区間の幅 width 手続きの実装から。
(define (width x) (/ (- (upper-bound x) (lower-bound x)) 2.0))
本文の説明をそのまま書くだけです。
r1 と r2 は同じ抵抗を使います。
(define r1 (make-interval 6.12 7.48)) (define r2 (make-interval 4.47 4.94))
r1 と r2 の区間の幅を求めてみます。
gosh> (width r1) 0.6800000000000002 gosh> (width r2) 0.23500000000000032
r1 と r2 の加算と減算をして区間の幅がどうなるか見てみます。
gosh> (width (add-interval r1 r2)) 0.9150000000000009 gosh> (width (sub-interval r1 r2)) 0.9150000000000005
r1 + r2 の区間の幅は、r1 の区間の幅と r2 の区間の幅を足した値になっています。
r1 - r2 も同様です。これを式っぽく書くと
width(r1) + width(r2) = width(r1 + r2) width(r1) - width(r2) = width(r1 + r2)
こうなります。
次に乗算と除算のときに区間の幅がどう変化するか見てみます。
gosh> (width (mul-interval r1 r2)) 4.797400000000003 gosh> (width (div-interval r1 r2)) 0.21725583965075324
乗算と除算の場合は、区間の幅は、先の式は使えない事がわかります。
同様に式っぽく書くと、
width(r1) * width(r2) ≠ width(r1 + r2) width(r1) / width(r2) ≠ width(r1 + r2)
こうなります。