summaryrefslogtreecommitdiffstats
path: root/final_project/work/numerolgist.scm
blob: 6553232bd11b26e4e8f7fc8c756f80e462069407 (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


; frac objects are like (number 'numerator 'denominator)

; the classics; just yanked from wikipedia w/o errors or citation
(define cgs-units-constants
  (list
   (list (* 2.998 (expt 10 10)) 'c) ; speed of light
   (list (* 6.626 (expt 10 -27)) 'h) ; plank
   (list (* 4.803 (expt 10 -10)) 'e) ; electron charge (esu)
;   (list 3.14159268 'pi) ; pi!
   ))

(define (make-ordered-fracs primatives)
  (sort (append primatives
		(map (lambda (x) 
		       (list (/ 1 (car x)) (quasiquote '(/ 1 ,(cadr x)))))
		     primatives))
	(lambda (a b) (< (car a) (car b)))))

(make-ordered-fracs cgs-units-constants)

(define (good-approximation x primatives eta)
  (define (closest-term y ordered)
    (cond ((null? ordered) (error "need at least one thing to check!")) 
	  ((null? (cdr ordered)) (car ordered))
	  ((< (abs (- y (caar ordered)))
	      (abs (- y (caar (cdr ordered)))))
	   (car ordered))
	  (else (closest-term y (cdr ordered)))))
  (define (iterate-term y ordered eta)
    (if (< (abs y) (abs eta))
	(begin
	  (display y)
	  (newline)
	  (display (- y eta))
	  '())
	(begin
	  (display "x: ") (display y) (newline)
	  (let ((best (closest-term y ordered)))
	    (cons (cadr best)
		  (iterate-term (/ y (car best)) ordered eta))))))
    (iterate-term x (make-ordered-fracs primatives) eta))

(good-approximation 876259081724391234.0 cgs-units-constants 200.)