SICP - Solution: Exercise 2.9
January 11, 2019
Exercise 2.9:
The width of an interval is half of the difference between its upper and lower bounds. The width is a measure of the uncertainty of the number specified by the interval. For some arithmetic operations the width of the result of combining two intervals is a function only of the widths of the argument intervals, whereas for others the width of the combination is not a function of the widths of the argument intervals. Show that the width of the sum (or difference) of two intervals is a function only of the widths of the intervals being added (or subtracted). Give examples to show that this is not true for multiplication or division.
Solution
We will use two interval $x$ and $y$. Per definition:
$$2\cdot x_{width}=x_{upper}-x_{lower}$$
$$2\cdot y_{width}=y_{upper}-y_{lower}$$
Addition #
Let’s compute the bound for the sum of interval $x$ and $y$
$$z = x + y$$
$$z_{lower}=x_{lower}+y_{lower}$$ $$z_{upper}=x_{upper}+y_{upper}$$
Based on that, we can compute and simplify the width:
$$2\cdot z_{width}=y_{upper}-y_{lower}=(x_{upper}+y_{upper})-(x_{lower}+y_{lower})$$ $$2\cdot z_{width}=x_{upper}-x_{lower}+y_{upper}-y_{lower}$$ $$2\cdot z_{width}=2\cdot x_{width}+2\cdot y_{width}$$ $$z_{width}=x_{width}+y_{width}$$
Subtraction #
Let’s compute the bound for the subtraction of interval $x$ and $y$
$$z = x - y$$
$$z_{lower}=x_{lower}-y_{upper}$$ $$z_{upper}=x_{upper}-y_{lower}$$
Based on that, we can compute and simplify the width:
$$2\cdot z_{width}=y_{upper}-y_{lower}=(x_{upper}-y_{lower})-(x_{lower}-y_{upper})$$ $$2\cdot z_{width}=x_{upper}-y_{lower}-x_{lower}+y_{upper}$$ $$2\cdot z_{width}=x_{upper}-x_{lower}+y_{upper}-y_{lower}$$ $$z_{width}=x_{width}+y_{width}$$
Multiplication #
One possible case, if all number are > 1
$$z_{lower}=x_{lower}*y_{lower}$$ $$z_{upper}=x_{upper}*y_{upper}$$
$$2\cdot z_{width}=y_{upper}-y_{lower}=(x_{upper}*y_{upper})-(x_{lower}*y_{lower})$$
Example:
(newline)
(define r3 (make-interval 100.0 101.0))
(define r4 (make-interval 22.0 23.0))
(display "r3= ") (display (width-interval r3)) (newline)
(display "r3= ") (display (width-interval r4)) (newline)
(display "mul= ") (display (width-interval (mul-interval r3 r4))) (newline)
(display "div= ") (display (width-interval (div-interval r3 r4))) (newline)
r3=0.5
r4=0.5
mul=61.5
div=0.12154150197628466