summaryrefslogtreecommitdiff
path: root/coding-exercises/2/14.rkt
blob: 50d28fc70570a17a4bbc2f945cb5f83e3ead0dee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#lang racket
(require "../../shared/intervals.rkt")

(define (print-interval-percent i)
  (newline)
  (display "interval{")
  (display (center i))
  (display ",")
  (display (percent i))
  (display "}")
  (newline))

(define (lem1 i1 i2)
  (div-interval (mul-interval i1 i2)
                (add-interval i1 i2)))

(define (lem2 i1 i2)
  (let ((one (make-center-percent 1.0 0)))
    (div-interval 
      one
      (add-interval 
        (div-interval one i1)
        (div-interval one i2)))))

;; adding scales the heighest percent to the new center
(define (print-add)
  (let ((i1 (make-center-percent 100.0 2.0))
        (i2 (make-center-percent 200.0 3.0)))
    (newline)
    (println "*** add")
    (print-interval-percent i1)
    (print-interval-percent i2)
    (print-interval-percent (add-interval i1 i1))
    (print-interval-percent (add-interval i1 i2))
    (print-interval-percent (sub-interval i1 i1))
    (print-interval-percent (sub-interval i1 i2))))

;; multiplication and addition of positive intervals
;; adds percentage from both intervals
(define (print-mul)
  (let ((i1 (make-interval 2.0 8.0))
        (i2 (make-interval 2.0 8.0)))
    (newline)
    (println "*** mul")
    (print-interval-percent i1)
    (print-interval-percent i2)
    (print-interval-percent (div-interval i1 i1))
    (print-interval-percent (div-interval i1 i2))
    (print-interval-percent (mul-interval i1 i1))
    (print-interval-percent (mul-interval i1 i2))))
  
;; There are at least some problems as I understand:
;; 1. Repeated intervals in an equation are dependent on each other
;; 2. Multiplicative identity is undefined and should not be uncertain
(define (print-lem)
  (let ((i1 (make-center-percent 100.0 2.0))
        (i2 (make-center-percent 200.0 3.0)))
    (newline)
    (println "*** lem")
    (print-interval-percent i1)
    (print-interval-percent i2)
    (print-interval-percent (lem1 i1 i2))
    (print-interval-percent (lem2 i1 i2))))
(print-add)
(print-mul)
(print-lem)