Đây không phải là một câu hỏi về bài tập về nhà, tôi chỉ không hài lòng với sự hiểu biết của tôi về số học khoảng thời gian và hàm ý của bài tập 2.16.SICP 2.16 interval-arithmetic (scheme)
Số học khoảng được xác định theo phần 2.14 không biểu thị các thuộc tính của số học bình thường. Hai nên là các phép toán tương đương, (r1 * r2)/(r1 + r2) và 1/(1/r1 + 1/r2), cho kết quả khác nhau. Bài tập hỏi tại sao đây là trường hợp, và nếu có thể xây dựng một hệ thống số học khoảng thời gian mà trong trường hợp này không phải là trường hợp.
Phần này giải quyết việc tính toán sai số sai số của các thành phần điện. Tôi không chắc tôi hiểu ý nghĩa của nó, trong các thuật ngữ này, để nhân và chia khoảng thời gian. Ứng dụng để nhân hai khoảng thời gian với nhau là gì?
Có thể xây dựng hệ thống số học khoảng không có vấn đề trong ví dụ này không?
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#%_sec_2.1.4
(define (make-interval a b)
(cons a b))
(define (make-center-width c w)
(make-interval (- c w) (+ c w)))
(define (make-center-percent c p)
(make-center-width c (* c (/ p 100.0))))
(define (lower-bound i)
(car i))
(define (upper-bound i)
(cdr i))
(define (center i)
(/ (+ (upper-bound i) (lower-bound i)) 2))
(define (width i)
(/ (- (upper-bound i) (lower-bound i)) 2))
(define (percent i)
(* 100.0 (/ (width i) (center i))))
(define (add-interval x y)
(make-interval (+ (lower-bound x) (lower-bound y))
(+ (upper-bound x) (upper-bound y))))
(define (sub-interval x y)
(make-interval (- (lower-bound x) (lower-bound y))
(- (upper-bound x) (upper-bound y))))
(define (mul-interval x y)
(let ((p1 (* (lower-bound x) (lower-bound y)))
(p2 (* (lower-bound x) (lower-bound y)))
(p3 (* (lower-bound x) (lower-bound y)))
(p4 (* (lower-bound x) (lower-bound y))))
(make-interval (min p1 p2 p3 p4)
(max p1 p2 p3 p4))))
(define (div-interval x y)
(if (= (width y) 0)
(error "division by interval with width 0")
(mul-interval x
(make-interval (/ 1.0 (upper-bound y))
(/ 1.0 (lower-bound y))))))
(define (parl1 r1 r2)
(div-interval (mul-interval r1 r2)
(add-interval r1 r2)))
(define (parl2 r1 r2)
(let ((one (make-interval 1 1)))
(div-interval one
(add-interval (div-interval one r1)
(div-interval one r2))))
(define (r1 (make-interval 4.0 3.2)))
(define (r2 (make-interval 3.0 7.2)))
(center (parl1 r1 r2))
(width (parl1 r1 r2))
(newline)
(center (parl2 r1 r2))
(width (parl2 r1 r2))