[ create a new paste ] login | about

Project: programmingpraxis
Link: http://programmingpraxis.codepad.org/oOdXhS7g    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Dec 10:
; calculating logarithms

(define epsilon 1e-7)

(define (newton x2)
  (let loop ((x 1.0))
    (if (< (abs (- (* x x) x2)) epsilon) x
      (loop (- x (/ (- (* x x) x2) (+ x x)))))))

(define (euler base n)
  (let loop ((lo 1.0) (log-lo 0.0) (hi 1.0) (log-hi 0.0))
    (cond ((< hi n) (loop lo log-lo (* hi base) (+ log-hi 1)))
          ((< (abs (- (/ log-lo log-hi) 1)) epsilon)
            (/ (+ log-lo log-hi) 2))
          (else (let* ((next (newton (* lo hi)))
                       (log-next (/ (+ log-lo log-hi) 2)))
                  (if (< next n)
                      (loop next log-next hi log-hi)
                      (loop lo log-lo next log-next)))))))

(display (newton 2)) (newline)
(display (euler 10 612)) (newline)
(display (expt 10 2.7867514193058014)) (newline)


Output:
1
2
3
1.4142135623746899
2.7867514193058014
611.9999959982614


Create a new paste based on this one


Comments: