ひまじんシリーズ

問題 2.12
本文では、パーセント指定を 3.5±0.15 みたくしたいということなので、
そのまま実装すると

(define (make-center-percent c p)
  (make-center-width c (* c p)))

(define (percent i)
  (/ (width i) (center i)))

こうなります。

;; r1 = 6.8Ω ±10%
(define r1a (make-interval 6.12 7.48))
(define r1b (make-center-width 6.8 0.68))
(define r1c (make-center-percent 6.8 0.1))

;; r2 = 4.7Ω ±5%
(define r2a (make-interval 4.465 4.935))
(define r2b (make-center-width 4.7 0.235))
(define r2c (make-center-percent 4.7 0.05))

本文にある 2 つの抵抗を各構築子で定義してみます。

;; gosh> r1a
;; (6.12 . 7.48)
;; gosh> r1b
;; (6.12 . 7.4799999999999995)
;; gosh> r1c
;; (6.12 . 7.4799999999999995)

;; gosh> r2a
;; (4.465 . 4.935)
;; gosh> r2b
;; (4.465 . 4.9350000000000005)
;; gosh> r2c
;; (4.465 . 4.9350000000000005)

構築子はそれぞれ異なりますが、interval としては同じ値になってますよね。
(多少の誤差が出ていますが、だいたい同じです)

それぞれの interval のpercent を求めてみます。

;; gosh> (percent r1a)
;; 0.10000000000000002
;; gosh> (percent r1b)
;; 0.09999999999999996
;; gosh> (percent r1c)
;; 0.09999999999999996

;; gosh> (percent r2a)
;; 0.04999999999999998
;; gosh> (percent r2b)
;; 0.050000000000000065
;; gosh> (percent r2c)
;; 0.050000000000000065

もちろん同じパーセンテージを返します。
(多少の誤差が出ていますが、だいたい同じです)