SICP問題2.9
感覚的にはさもありなん、ということで実験
二つの区間 X, Y を、それぞれ (x±a), (y±b) とすると、X, Y の加算の上限、下限は
(x + a) + (y + b) = (x + y) + (a + b) (x - a) + (y - b) = (x + y) - (a + b)
となる。よって加算の結果の幅は以下のようになる
(x ± a) + (y ± b) = (x + y) ± (a + b)
減算の上限、下限は
(x + a) - (y - b) = (x - y) + (a + b) (x - a) - (y + b) = (x - y) - (a + b)
となる。よって減算の結果の幅は以下のようになる。
(x ± a) - (y ± b) = (x - y) ± (a + b)
このことから、加算、減算の結果の幅は引数の区間の幅の関数といえる
乗算・除算については以下のようになる
乗算の上限と下限は
(x + a) * (y + b) = xy + bx + ay + ab = (x * y) + (bx + ay + ab) (x - a) * (y - b) = xy - bx - ay + ab = (x * y) - (bx + ay - ab)
上限と下限の幅は引数の区間の幅の関数とはいえない
除算は
(x + a) / (y - b) = (x / (y - b)) + (a / (y - b)) (x - a) / (y + b) = (x / (y + b)) - (a / (y + b))
となり、上限と下限の幅は引数の区間の幅の関数とはいえない
問題では「乗算と除算についてはこれが成り立たないことを例で示せ。」とのことなので、(10±3), (5±2)の場合を考える
乗算では
(10 + 3) * (5 + 2)= 91 = 50 + 41 (10 - 3) * (5 - 2) = 21 = 50 - 29
除算では
(10 + 3) / (5 - 2) = 4.333 = 2 + 2.333 (10 - 3) / (5 + 2) = 1 = 2 - 1
となり、それぞれ引数の区間の幅では表せない。