計算機プログラムの構造と解釈 第二版 P53 問題2.13

題意は以下、

・二つの区間の積の相対許容誤差を、因子の許容誤差をつかって近似できる簡単な式があることを示す。


ま、取り合えずあれだ、二つの区間の積をやってみればわかるだろうという、
大雑把な感じでやってみる。


積をとる二つの区間をi0とi1とする
そうすると、区間の対は以下の表現になる。

i0 = (i0l . i0u)
i1 = (i1l . i1u)


i0の中央値を、c0
i1の中央値を、c1
とする。

また、
i0の許容誤差を、p0
i1の許容誤差を、p1
とする。
p0、p1は割合なので0.01とか、1<= p0 <=0, 1<= p1 <=0、みたいな感じになるはず。

そうすると、以下のように表現できる

i0l = c0 - (c0 * p0)/2
i0u = c0 + (c0 * p0)/2

i1l = c1 - (c1 * p1)/2
i1u = c1 + (c1 * p1)/2

んで、問題にあるように

すべての数が正と仮定し

ってことだから、
区間i0とi1の積によって表現される区間、i2は次の用に表現できる

i2l = i0l * i1l
    = (c0 - (c0 * p0)/2) * (c1 - (c1 * p1)/2)
    = c0c1 - c0c1p1/2 - c0c1p0/2 + c0c1p0p1/4
    = c0c1( 1 - p0/2 - p1/2 + p0p1/4)
     = c0c1( 1 - (p0 + p1)/2 +p0p1/4)

i2u = i0u * i1u
    = (c0 + (c0 * p0)/2) * (c1 + (c1 * p1)/2)
    = c0c1 + c0c1p1/2 + c0c1p0/2 + c0c1p0p1/4
    = c0c1( 1 + p0/2 + p1/2 + p0p1/4)
    = c0c1( 1 + (p0 + p1)/2 +p0p1/4)
    = c0c1( 1 + (p0 + p1)/2 +p0p1/4)

ここで、p0p1が鬼の用に小さいと仮定すると。
(ともすると、「では鬼は存在を無視できるほど小さいのか?」と言う議論になりがちだが、
ここでは問題の本質ではないので無視する。鬼は超ちっちゃい。)
p0p1は無視できる。そうすると、

i2l = c0c1( 1 - (p0 + p1)/2)
i2u = c0c1( 1 + (p0 + p1)/2)


i0、i1の積の結果できた新たな区間i2の新たな中央値をc2,許容誤差をp2とすると、

i2l = c2 - (c2 * p2)/2
i2u = c2 + (c2 * p2)/2

だので、

i2l = c2(1 - p2/2)
i2u = c2(1 + p2/2)

置き換えると、

c2 = c0c1
p2 = p0 + p1

だ。

だから、許容誤差は

p0 + p1

に近似できる。