計算機プログラムの構造と解釈 第二版 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
に近似できる。