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

C++로 급수의 합 구하기: 1 − x²/2! + x⁴/4! − … (n번째 항까지)

개요

이 튜토리얼에서는 급수 1 − x²/2! + x⁴/4! − …의 합을 n번째 항까지 구하는 C++ 프로그램을 살펴봅니다.

문제에서는 x와 n의 값이 주어지며, 주어진 n개의 항까지 해당 급수의 합을 계산하는 것이 목표입니다. 각 항의 팩토리얼을 직접 계산하고 표준 라이브러리의 거듭제곱 함수(pow)를 활용하면 손쉽게 해결할 수 있습니다.

참고로 이 급수는 코사인 함수의 매크로린 전개(cos x = 1 − x²/2! + x⁴/4! − …)와 동일한 형태이므로, 주어진 x에 대한 코사인 값을 근사적으로 계산하는 데에도 활용할 수 있습니다.

예제 코드

#include <math.h>
#include <stdio.h>
// 급수의 합을 계산하는 함수
double calc_sum(double x, int n){
    double sum = 1, term = 1, fct, j, y = 2, m;
    int i;
    for (i = 1; i < n; i++) {
        fct = 1;
        // 현재 항의 팩토리얼 계산
        for (j = 1; j <= y; j++) {
            fct = fct * j;
        }
        term = term * (-1);          // 부호 교차 변경
        m = term * pow(x, y) / fct;  // 현재 항 계산
        sum = sum + m;
        y += 2;                      // 지수를 2씩 증가
    }
    return sum;
}
int main(){
    double x = 5;
    int n = 7;
    printf("%.4f", calc_sum(x, n));
    return 0;
}

출력 결과

0.3469

코드 설명

위 코드의 동작 과정을 단계별로 정리하면 다음과 같습니다.

  • calc_sum 함수: x와 n을 입력받아 급수의 합을 반환합니다. 첫 번째 항은 1이므로 sum과 term을 1로 초기화합니다.
  • 팩토리얼 계산: 내부 반복문에서 j를 1부터 y까지 곱해 각 항의 분모에 해당하는 팩토리얼(y!)을 구합니다.
  • 부호 처리: term에 -1을 곱해 항마다 부호가 (+, −, +, −…) 번갈아 나타나도록 만듭니다.
  • 항 계산 및 누적: pow(x, y)로 x의 y제곱을 구한 뒤 팩토리얼로 나누어 현재 항 m을 계산하고, 이를 sum에 더합니다.
  • 지수 갱신: y가 2씩 증가하므로 지수는 2, 4, 6, …처럼 짝수로 진행됩니다.

x = 5, n = 7을 대입하면 일곱 번째 항까지의 부분합인 0.3469가 출력됩니다. 실제 cos(5) ≈ 0.2837이며, 항의 개수를 늘릴수록 결과가 실제값에 점점 가까워집니다.