Решение упражнения 2.12 из SICP
Конструктор получается достаточно прямолинейно по формулам
lower-bound = center - center * percent / 100,
upper-bound = center + center * percent / 100:
(define (make-center-percent c p) (let ((w (* c (/ p 100)))) (make-interval (- c w) (+ c w))))
Еще проще выразить конструктор через имеющийся make-center-width.
Селектор для percent можно получить, воспользовавшись таким математическим результатом, выразив percent из последней формулы для конструктора:
percent = (upper-bound - center) / center * 100 = (upper-bound - (lower-bound + upper-bound)/2) / [(lower-bound + upper-bound)/2] * 100 = (upper-bound - lower-bound) / (upper-bound + lower-bound) * 100
Соответственно селектор примет следующий вид:
(define (percent i) (let ((l (lower-bound i)) (u (upper-bound i))) (* 100 (/ (- u l) (+ u l)))))
И действительно:
> (make-center-percent 400 3) (388 . 412)
> (percent (make-center-percent 400 3)) 3
Comments
Comment from Sergey Khenkin
Date: January 21, 2008, 10:04 pm
Важно понимать, что такое задание интервалов применимо лишь для случаев, когда центр интервала не совпадает с нулем. Сам разговор о погрешности в процентах для нулевого значения не имеет смысла.
Pingback from SICP по-русски » Blog Archive » Решение упражнения 2.13 из SICP
Date: January 21, 2008, 11:07 pm
[…] SICP по-русски Структура и интерпретация компьютерных программ: заметки и решения « Решение упражнения 2.12 из SICP […]
Write a comment