03. 피보나치의 걸작, 《산반서(Liber Abaci)》

1. 학습 목표 (Learning Objectives)

  • 서양 수학의 방향을 완전히 바꿔놓은 피보나치의 명저 《산반서》의 의미를 알아봅니다.
  • 로마 숫자 체계의 단점과 힌두-아라비아 기수법의 압도적인 연산 능력을 파이썬 코드를 통해 직관적으로 비교합니다.

2. 0의 도입과 십진법의 전파

13세기 유럽의 상인들은 계산을 할 때 여전히 I, II, III, IV, V, X, L, C, M 과 같은 로마 숫자를 사용했습니다. 로마 숫자는 덧셈과 뺄셈마저도 너무나 복잡했고 곱셈과 나눗셈은 일반인이 하기 불가능에 가까웠습니다.

이탈리아 피사의 무역상이었던 아버지 덕분에 북아프리카와 중동 지역을 여행하던 피보나치는 아랍의 학자들로부터 ‘힌두-아라비아 숫자(0~9)’ 체계를 배우게 됩니다. 특히 기호 ‘0 (Zero)’과 십진법의 존재는 피보나치에게 엄청난 충격이었습니다.

1202년, 그는 이 위대한 계산법과 상업 수학, 그리고 토끼 번식 문제 등을 총망라하여 《산반서(Liber Abaci; 계산의 책)》를 집필했습니다. 이 책으로 인해 유럽은 비로소 로마 숫자를 버리고 오늘날 우리가 쓰는 0부터 9까지의 숫자를 받아들여 과학과 상업의 대폭발을 맞이하게 됩니다.

3. 로마 숫자 vs 아라비아 숫자 (Python)

로마 숫자로 108을 쓰면 CVIII (C: 100, V: 5, I: 1) 입니다. 컴퓨터는 이 로마 숫자를 어떻게 현대 숫자로 바꿀 수 있을까요? 파이썬을 이용한 딕셔너리 매핑 기법을 살펴봅시다.

산반서의 충격 SVG 시각화: 수식을 나열하는 1차원적 로마 숫자와, 위치(자릿수)와 기호 '0'을 활용해 효율적으로 압축된 아라비아 숫자의 차이점 비교
# 로마 숫자와 아라비아 숫자의 1:1 매칭 딕셔너리 (사전)
roman_map = {
    'I': 1, 'V': 5, 'X': 10, 'L': 50, 
    'C': 100, 'D': 500, 'M': 1000
}

roman_numeral = "CVIII"
total = 0

# 문자열을 하나씩 읽어서 아라비아 숫자로 누적해서 더합니다.
for char in roman_numeral:
    total += roman_map[char]

print(f"로마 숫자 {roman_numeral} 은(는) 십진법으로 {total} 입니다.")
# 출력: 로마 숫자 CVIII 은(는) 십진법으로 108 입니다.

십진법(아라비아 숫자)은 이처럼 복잡한 매핑 과정 없이도 바로 위치와 자리수(10의 거듭제곱)를 통해 숫자의 크기를 인지하게 해줍니다. 산반서가 없었다면 우리의 과학 기술은 수백 년 지체되었을지도 모릅니다.

4. 학습 정리 (Summary)

  1. 《산반서》: 유럽에 아라비아 숫자 0~9와 십진법, 피보나치수열을 대대적으로 전파한 역사적 수학서입니다.
  2. 혁명적 계산기호 0: 위치적 기수법(자릿수)을 가능하게 만들어 복잡한 사칙연산을 비약적으로 발전시켰습니다.
  3. 파이썬 매핑: 딕셔너리(dict) 구조를 활용해 구시대의 기호(로마 숫자)를 현대적인 데이터로 치환하는 전처리(Preprocessing) 논리를 배울 수 있습니다.
서브목차