まじんはひまじん(1)

問題 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)

こうなります。