12345678910111213141516171819202122232425262728293031 |
- #!/usr/bin/ruby
- # Daniel "Trizen" Șuteu
- # Date: 17 March 2018
- # https://github.com/trizen
- # Arithmetic-harmonic mean (AHM).
- # AHM is equivalent with the geometric mean: AHM(a, b) = sqrt(a * b)
- func AHM(a, h, p=100) {
- loop {
- var a1 = ((a + h) / 2)
- var h1 = (2 / (1/a + 1/h))
- if (
- (a1.round(-p) == a.round(-p)) &&
- (h1.round(-p) == h.round(-p))
- ) {
- return a
- }
- (a, h) = (a1, h1)
- }
- }
- say AHM(1, 2) #=> sqrt(1 * 2)
- say AHM(2, 5) #=> sqrt(2 * 5)
- say AHM(3, 42) #=> sqrt(3 * 42)
|