arithmetic-harmonic_mean.sf 596 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 17 March 2018
  4. # https://github.com/trizen
  5. # Arithmetic-harmonic mean (AHM).
  6. # AHM is equivalent with the geometric mean: AHM(a, b) = sqrt(a * b)
  7. func AHM(a, h, p=100) {
  8. loop {
  9. var a1 = ((a + h) / 2)
  10. var h1 = (2 / (1/a + 1/h))
  11. if (
  12. (a1.round(-p) == a.round(-p)) &&
  13. (h1.round(-p) == h.round(-p))
  14. ) {
  15. return a
  16. }
  17. (a, h) = (a1, h1)
  18. }
  19. }
  20. say AHM(1, 2) #=> sqrt(1 * 2)
  21. say AHM(2, 5) #=> sqrt(2 * 5)
  22. say AHM(3, 42) #=> sqrt(3 * 42)