SICP 問題2.9

2017-10-18

区間の幅(width)は上限と下限の差の半分である.幅は区間で規定した数の不確かさの量である.
算術演算のあるものには, 二つの区間から作った結果の幅は, 引数の幅だけの関数であり, 他のものには, 結果の幅は引数の区間の幅の関数にはならない.
二つの区間の和(または差)の幅は, 足されるべき(または引かれるべき)区間の幅だけの関数であることを示せ.
乗算と除算についてはこれが成り立たないことを例で示せ.

問題文の意味がちょっとよくわからないが、算術演算は既にあるので具体的な数値を入れて動かしてみれば良さそう。

(define foo (make-interval 3.14 4.56))
; 差=1.42 幅=0.71
(define bar (make-interval 5.25 6.33))
; (0.6900000000000004 . 3.19)
; 差=1.08 幅=0.54

; 差の合計=2.5 幅の合計=1.25

(print (add-interval foo bar))
; (8.39 . 10.89)
; 差=2.5 幅=1.25

(print (sub-interval bar foo))
; (0.6900000000000004 . 3.19)
; 差=2.5 幅=1.25

(print (mul-interval foo bar))
; (16.485 . 28.8648)
; 差=12.3798 幅=6.1899

(print (div-interval foo bar))
; (0.49605055292259087 . 0.8685714285714284)
; 差=0.372520876 幅=0.186260438

確かにそうなってる。
よって、和差では成り立つけれど、乗算と除算では成り立たない。