Name: Anonymous 2013-02-22 15:14
Ben Bitdiddler, an expert systems programmer, said that I was supposed to find 9 cases, but instead...
So... what?
table for x * y, where
x = [a,b]
y = [c,d]
a b c d ac ad bc bd min max
+ + + + + + + + ac bd
- - - - + + + + ac bd
+ - - - - - + + ad bd
- + + + - - + + ad bd
+ - + - + - - + ad|bc bd
- + - + + - - + ad|bc bd
- - + - - + - + bc bd
+ + - + - + - + bc bd
+ - + + + + - - bd ad
- + - - + + - - bd ad
+ + + - + - + - bd bc
- - - + + - + - bd bc
+ + - - - - - - bd ac
- - + + - - - - bd ac
+ - - + - + + - bd ad|bc
- + + - - + + - bd ad|bc(define (sign x) (if (< x 0) -1 +1))
(define (same-sign a b) (= (sign a) (sign b)))
(define (mul-interval x y)
(let ((a (lower-bound x))
(b (upper-bound x))
(c (lower-bound y))
(d (upper-bound y)))
(if (same-sign b d)
(if (same-sign b c)
(if (same-sign a c)
(make-interval (* a c) (* b d))
(make-interval (* a d) (* b d)))
(if (same-sign a c)
(make-interval (min (* a d)
(* b c))
(* b d))
(make-interval (* b c) (* b d))))
(if (same-sign a c)
(if (same-sign a d)
(make-interval (* b d) (* a d))
(make-interval (* b d) (* b c)))
(if (same-sign a d)
(make-interval (* b d) (max (* a d)
(* b c)))
(make-interval (* b d) (* a c)))))))So... what?