問題2.7-2.13

問題2.7

(define (make-interval a b) (cons a b))
(define (lower-bound z) (car z))
(define (upper-bound z) (cdr z))

問題2.8

(define (sub-interval x y)
  (make-interval (- (lower-bound x) (upper-bound y))
		 (- (upper-bound x) (lower-bound y))))

問題2.9

Add

[(a-Δa) + (b-Δb), (a+Δa) + (b+Δb)]
=> [a+b-(Δa+Δb), a+b+(Δa+Δb)]

Sub

[(a-Δa) - (b+Δb), (a+Δa) - (b-Δb)]
=> [a-b-(Δa+Δb), a-b+(Δa+Δb)]

Mul

(a±Δa) * (b±Δb)
=> ab ± (aΔb ± Δab + ΔaΔb)

てなことで、いいのかな。和と差の誤差成分は、それぞれの和と差で決まるけど。乗除の誤差には、それ以外の項が存在する。

問題2.10

カンニングしました。
http://oss.timedia.co.jp/show/SICP/ex-2.10

(define (div-interval x y)
  (let ((uby (upper-bound y))
	(lby (lower-bound y)))
    (if (< (* uby lby) 0)
	(error "Divided by an interval spaning zero")
	(mul-interval x
    		      (make-inteval (/ 1.0 uby)
			   	    (/ 1.0 lby))))))

問題2.11

正負で場合分けしろってこと? めんどっちぃので、省略。

問題2.12

(define (make-center-percent c w)
  (make-interval (- c (* c (/ w 100.0)))
		 (+ c (* c (/ w 100.0)))))
(define (percent i)
  (let ((cv (center i))
	(wv (width i)))
    (* (/ wv cv) 100)))

この辺はやるのみ、って感じ。

問題2.13

(a±Δa) * (b±Δb)
=> ab ± (aΔb ± Δab + ΔaΔb)
=> ab ± (aΔb ± Δab)
=> ab ± (Δb/b ± Δa/a)ab

ΔaΔbは無視できると。

何か、この辺の問題はどうでもいい感じ。