이 글에서는 산술 평균(Arithmetic Mean)과 기하 평균(Geometric Mean)을 이용하여 조화 평균(Harmonic Mean)을 구하는 방법을 알아봅니다.
세 가지 평균의 기본 공식은 다음과 같습니다.
- 산술 평균(AM) : (a + b) / 2
- 기하 평균(GM) : √(a × b)
- 조화 평균(HM) : 2ab / (a + b)
조화 평균 공식 유도
조화 평균은 산술 평균과 기하 평균의 관계를 통해 다음과 같이 표현할 수 있습니다.
HM = GM² / AM
즉, 두 수에 대해 기하 평균의 제곱을 산술 평균으로 나누면 조화 평균을 얻을 수 있습니다. 참고로 세 평균 사이에는 항상 산술 평균 ≥ 기하 평균 ≥ 조화 평균의 크기 관계가 성립합니다.
C++ 구현 예제
#include <iostream>
#include <cmath>
using namespace std;
double getHarmonicMean(int a, int b) {
double AM, GM, HM;
AM = (a + b) / 2.0; // 정수 나눗셈 오류를 방지하기 위해 2.0으로 나눔
GM = sqrt((double)a * b);
HM = (GM * GM) / AM;
return HM;
}
int main() {
int a = 5, b = 15;
double res = getHarmonicMean(a, b);
cout << "Harmonic Mean of " << a << " and " << b << " is " << res;
}실행 결과
Harmonic Mean of 5 and 15 is 7.5
코드 설명
위 예제에서는 a = 5, b = 15일 때 다음 순서로 계산이 진행됩니다.
- 산술 평균 : (5 + 15) / 2 = 10
- 기하 평균 : √(5 × 15) = √75 ≈ 8.66
- 조화 평균 : 8.66² / 10 ≈ 7.5
실제로 직접 공식 2ab / (a + b) = 150 / 20 = 7.5와 동일한 결과가 나오는 것을 확인할 수 있습니다.
주의할 점
a와 b가 정수형(int)일 때 (a + b) / 2처럼 정수 2로 나누면 정수 나눗셈이 발생하여 소수점 이하가 잘려나갈 수 있습니다. 따라서 2.0으로 나누거나 명시적으로 double 형변환을 해주는 것이 안전합니다. 또한 두 수 중 하나가 0인 경우 기하 평균이 0이 되어 결과가 항상 0이 되므로, 입력 값 검증을 추가하는 것도 좋은 습관입니다.