머신 한계를 넘어서는 정밀 연산 기법
초록
본 논문은 Fortran 배열을 이용해 부동소수점의 표현 범위를 초과하는 정수를 직접 구현하는 방법을 제시한다. 학생들이 직접 큰 수의 곱셈·나눗셈을 수행하면서 임의 정밀(arbitrary‑precision) 연산의 원리를 이해하도록 설계된 과제로, 과학·공학 계산에서 오버플로·언더플로를 회피하는 실용적 기법을 교육한다.
상세 분석
이 과제는 “큰 수를 배열에 분할 저장한다”는 가장 기본적인 임의 정밀 연산 아이디어를 Fortran 90/95 수준의 문법만으로 구현한다는 점에서 교육적 가치가 크다. 숫자를 10ⁿ(또는 2ⁿ) 기반의 ‘자리’ 단위로 나누어 정수형 배열에 저장하고, 각 자리에서 발생하는 캐리·버로우를 직접 처리한다. 예를 들어, 2·4·6·…·2k 형태의 연속 짝수 곱을 수행할 때는 매 단계마다 현재 결과 배열에 곱셈 인자를 곱하고, 자리마다 곱셈 결과를 누적한 뒤 10ⁿ을 초과하면 상위 자리로 이월한다. 이 과정은 전통적인 수학적 손연산과 동일하지만, 메모리 한계 내에서 무한히 확장 가능한 구조를 제공한다.
또한, 두 개의 오버플로가 발생한 부동소수점 값을 곱하거나 나누는 사례를 통해 “정규화된 지수와 가수”를 분리하고, 가수 부분을 배열 기반 정밀도로 변환한 뒤 연산을 수행한다. 이렇게 하면 부동소수점 자체가 제공하는 53비트(배정밀도) 한계를 넘어서는 정확도를 얻을 수 있다. 구현상의 핵심은
- 배열 크기와 자리 기반을 적절히 선택해 메모리 사용을 최적화하고,
- 캐리·버로우 연산을 효율적인 루프 구조로 구현하며,
- 최종 결과를 인간이 읽을 수 있는 문자열 형태로 변환하는 출력 루틴을 제공하는 것이다.
Fortran은 고성능 과학 계산에 널리 쓰이지만, 표준 라이브러리에는 임의 정밀 연산이 포함되지 않는다. 따라서 학생들은 직접 알고리즘을 설계·디버깅함으로써 수치 해석의 근본 원리를 체득한다. 실제 산업 현장, 특히 DSP 하드웨어 설계에서는 제한된 비트폭 내에서 연산 정확도를 유지해야 하므로, 이와 유사한 다중 정밀 스킴이 펌웨어 수준에서 적용된다. 논문은 기존 GMP·MPFR 같은 외부 라이브러리와 비교해 구현 난이도·학습 효과·메모리·속도 트레이드오프를 논의하고, 교육용 프로젝트로서 충분히 실용적임을 입증한다.