]> git.rkrishnan.org Git - sicp.git/commitdiff
solution to 2.15
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Mon, 14 Jun 2010 09:38:27 +0000 (15:08 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Mon, 14 Jun 2010 09:38:27 +0000 (15:08 +0530)
src/sicp/ch2_1_extended.clj
src/sicp/ex2_15.clj [new file with mode: 0644]

index dca737b4e737e47fc858b95f4c507ac769f13298..0631e7dfb9201a1b1faa7af83fdcc01bc11c28fd 100644 (file)
@@ -42,4 +42,4 @@
   (let [one (make-interval 1 1)]
     (div-interval one
                  (add-interval (div-interval one r1)
-                               (div-interval one r2)))))
\ No newline at end of file
+                               (div-interval one r2)))))
diff --git a/src/sicp/ex2_15.clj b/src/sicp/ex2_15.clj
new file mode 100644 (file)
index 0000000..7072794
--- /dev/null
@@ -0,0 +1,32 @@
+(ns sicp.ex2_15
+  (:use [sicp utils ch2_1_extended ex2_7 ex2_8 ex2_12]
+       [clojure.test]))
+
+(def r1 (make-center-percent 1000 0.01))
+(def r2 (make-center-percent 100  0.01))
+
+(def r3 (sub-interval (add-interval r1 r2) r2))
+;;=> (999.8799999999999 1000.1200000000001)
+
+(percentage r3)
+;;=> 0.012000000000011824
+
+(center r3)
+;;=> 1000.0
+
+(comment
+"This shows that even if you add and subtract an interval (r2) from
+another interval, we get back an interval which is not the same as
+the original one r1. Let us look at the range as (center, percentage)
+pair.
+ r1 = c1 +/- w1
+ r2 = c2 +/- w2
+
+Now r1+r2-r2 = c1 + c2 - c1 +/- (2*w1+w2)
+             = c1 +/- (2*w1 + w2)
+
+i.e. we have a new percentage width as the errors add up. The inference
+from this is that, we reduce the number of ranges in a calculation to
+get a more accurate range. So, yes, Eva Lu Ator is right.
+"
+  )
\ No newline at end of file