Решение упражнения 2.12 из SICP

21 January, 2008 (22:00) | Решения упражнений

Конструктор получается достаточно прямолинейно по формулам

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