fork(1) download
  1. ; geothmetic meandian
  2.  
  3. (define (agm x y)
  4. (let loop ((a (max x y)) (g (min x y)))
  5. (if (< (/ a g) 1.00000001)
  6. (/ (+ a g) 2)
  7. (loop (/ (+ a g) 2) (sqrt (* a g))))))
  8.  
  9. (define (gm . xs)
  10. (define (median3 a b c)
  11. (cond ((or (<= b a c) (<= c a b)) a)
  12. ((or (<= a b c) (<= c b a)) b)
  13. (else c)))
  14. (let* ((len (length xs))
  15. (a (/ (apply + xs) len))
  16. (g (expt (apply * xs) (/ len)))
  17. (m (list-ref (sort xs <) (quotient len 2))))
  18. (let loop ((a a) (g g) (m m))
  19. (if (and (< (/ a g) 1.00000001)
  20. (< (/ a m) 1.00000001)
  21. (< (/ g m) 1.00000001))
  22. (/ (+ a g) 2)
  23. (loop (/ (+ a g m) 3)
  24. (expt (* a g m) 1/3)
  25. (median3 a g m))))))
  26.  
  27. (display (agm 24 6)) (newline)
  28. (display (gm 1 1 2 3 5)) (newline)
Success #stdin #stdout 0.01s 7972KB
stdin
Standard input is empty
stdout
13.4581714817256
2.0890461040333