Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 산술 평균과 기하 평균을 이용해 조화 평균 구하기

이 글에서는 산술 평균(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이 되므로, 입력 값 검증을 추가하는 것도 좋은 습관입니다.