問題 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
もちろん同じパーセンテージを返します。
(多少の誤差が出ていますが、だいたい同じです)