개요
이 튜토리얼에서는 급수 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이며, 항의 개수를 늘릴수록 결과가 실제값에 점점 가까워집니다.