6.116 부동 소수점 연산과 반올림 오차

6.116 부동 소수점 연산과 반올림 오차

1. 개요

로봇공학의 수치 계산은 디지털 컴퓨터에서 부동 소수점(floating-point) 연산으로 수행된다. 부동 소수점 수는 실수의 유한한 근사이므로, 모든 연산에서 반올림 오차(rounding error)가 발생한다. 이러한 오차가 로봇의 기구학, 동역학, 제어 계산에 미치는 영향을 이해하는 것은 신뢰할 수 있는 로봇 시스템 설계의 기초이다. 본 절에서는 부동 소수점 수의 표현, 산술 연산에서의 오차 발생 메커니즘, 그리고 로봇공학 계산에서의 구체적인 영향을 분석한다.

2. 부동 소수점 수의 표현

2.1 IEEE 754 표준

IEEE 754 표준에 따르면, 부동 소수점 수 x는 다음과 같이 표현한다.

x = (-1)^s \times m \times 2^e

여기서 s는 부호 비트(sign bit), m은 가수(mantissa 또는 significand), e는 지수(exponent)이다.

형식부호지수가수전체 비트유효 십진 자릿수
단정밀도(float)182332약 7
배정밀도(double)1115264약 15–16

정규화된(normalized) 부동 소수점 수에서 가수는 1 \leq m < 2의 범위에 있으며, 선행 비트 1은 암묵적으로 저장된다.

2.2 기계 엡실론

기계 엡실론(machine epsilon) \varepsilon_{\text{mach}}1 + \varepsilon > 1을 만족하는 가장 작은 부동 소수점 수이다. 이는 부동 소수점 표현의 상대 정밀도를 나타낸다.

\varepsilon_{\text{mach}} = 2^{-(p-1)}

여기서 p는 가수의 비트 수(암묵적 비트 포함)이다.

형식p\varepsilon_{\text{mach}}십진 근사
단정밀도242^{-23}\approx 1.19 \times 10^{-7}
배정밀도532^{-52}\approx 2.22 \times 10^{-16}

실수 x를 부동 소수점 수 \text{fl}(x)로 표현할 때의 상대 오차는 다음과 같이 한정된다.

\frac{\vert\text{fl}(x) - x\vert}{\vert x\vert} \leq \frac{\varepsilon_{\text{mach}}}{2} = u

여기서 u를 단위 반올림(unit roundoff)이라 한다.

3. 기본 산술 연산의 오차

3.1 부동 소수점 산술의 공리

IEEE 754 표준을 준수하는 부동 소수점 산술에서, 기본 연산 \circ \in \{+, -, \times, /\}에 대해 다음이 성립한다.

\text{fl}(a \circ b) = (a \circ b)(1 + \delta), \quad \vert\delta\vert \leq u

이는 각 기본 연산의 결과가 정확한 결과에 가장 가까운 부동 소수점 수임을 보장한다.

3.2 소거 오차

덧셈과 뺄셈에서 가장 심각한 오차 원인은 소거(cancellation)이다. 크기가 비슷한 두 수의 뺄셈에서 유효 숫자의 상실이 발생한다.

예를 들어 a = 1.23456789012345이고 b = 1.23456789012300일 때, 이 두 수의 차이는 다음과 같다.

a - b = 0.00000000000045 = 4.5 \times 10^{-13}

원래 약 15자리의 유효 숫자를 가지던 두 수의 차이에서는 약 2자리의 유효 숫자만 남는다. 이를 치명적 소거(catastrophic cancellation)라 한다.

3.3 로봇공학에서의 소거 오차 발생 사례

로봇공학에서 소거 오차가 발생하는 대표적인 상황은 다음과 같다.

회전 행렬에서 회전각 추출: 회전 행렬 \mathbf{R}의 대각 원소의 합으로부터 회전각 \theta를 계산할 때, \theta가 0에 가까우면 소거 오차가 발생한다.

\cos\theta = \frac{\text{tr}(\mathbf{R}) - 1}{2}

\theta \approx 0이면 \text{tr}(\mathbf{R}) \approx 3이므로 3 - 1 = 2에서 소거가 발생하지 않지만, \theta \approx \pi이면 \text{tr}(\mathbf{R}) \approx -1이므로 -1 - 1 = -2에서 마찬가지로 문제가 없다. 그러나 \cos\theta에서 \theta를 역삼각함수로 추출할 때, \theta \approx 0 또는 \theta \approx \pi 근방에서 \arccos의 민감도가 달라지므로 주의가 필요하다.

야코비 행렬의 수치 미분: 야코비 행렬을 유한 차분(finite difference)으로 근사할 때, 차분 간격 h가 너무 작으면 소거 오차가 지배적이 된다.

\frac{\partial f}{\partial q_i} \approx \frac{f(\mathbf{q} + h\mathbf{e}_i) - f(\mathbf{q})}{h}

전방 차분(forward difference)의 총 오차는 절단 오차(truncation error)와 반올림 오차의 합이다.

E_{\text{total}} = \underbrace{\frac{h}{2}\vert f''(\xi)\vert}_{\text{절단 오차}} + \underbrace{\frac{2u\vert f(\mathbf{q})\vert}{h}}_{\text{반올림 오차}}

최적의 차분 간격은 두 오차가 균형을 이루는 지점에서 결정된다.

h_{\text{opt}} = 2\sqrt{\frac{u \vert f(\mathbf{q})\vert}{\vert f''(\xi)\vert}}

배정밀도에서 u \approx 10^{-16}이므로 h_{\text{opt}} \approx 10^{-8} 정도이다.

4. 오차 전파 분석

4.1 전진 오차와 후진 오차

수치 알고리즘의 오차를 분석하는 두 가지 관점이 있다.

전진 오차(forward error): 계산된 해 \hat{\mathbf{x}}와 정확한 해 \mathbf{x}의 차이이다.

\Delta\mathbf{x} = \hat{\mathbf{x}} - \mathbf{x}

후진 오차(backward error): 계산된 해 \hat{\mathbf{x}}가 정확한 해가 되는 섭동된 문제 (\mathbf{A} + \Delta\mathbf{A})\hat{\mathbf{x}} = \mathbf{b} + \Delta\mathbf{b}에서의 섭동 크기이다.

두 오차의 관계는 조건수를 통해 연결된다.

\frac{\|\Delta\mathbf{x}\|}{\|\mathbf{x}\|} \leq \kappa(\mathbf{A}) \cdot \frac{\|\Delta\mathbf{A}\|}{\|\mathbf{A}\|}

4.2 행렬 연산의 오차 전파

로봇공학에서 빈번하게 사용하는 행렬 곱셈 \mathbf{C} = \mathbf{A}\mathbf{B}에서, 부동 소수점 연산으로 계산된 \hat{\mathbf{C}}의 오차는 다음과 같이 한정된다.

\vert\hat{C}_{ij} - C_{ij}\vert \leq nu \sum_{k=1}^{n} \vert A_{ik}\vert \cdot \vert B_{kj}\vert + O(u^2)

여기서 n은 내적의 차원이다. 이를 성분별 후진 오차 한계(componentwise backward error bound)라 한다.

4.3 동차 변환 행렬의 오차 누적

로봇 매니퓰레이터에서 순기구학은 동차 변환 행렬의 연쇄 곱으로 계산한다.

\mathbf{T}_n^0 = \mathbf{T}_1^0 \mathbf{T}_2^1 \cdots \mathbf{T}_n^{n-1}

n개의 4 \times 4 행렬 곱셈에서 반올림 오차가 누적된다. k번째 행렬 곱 이후의 누적 오차는 대략 O(ku)이다. 6자유도 매니퓰레이터의 경우 6회의 행렬 곱이 필요하므로, 최종 위치 오차는 O(6u) \approx O(10^{-15}) 수준이다. 이는 배정밀도에서 실용적으로 문제가 되지 않는다.

그러나 다음과 같은 상황에서는 오차가 증폭될 수 있다.

  • 관절 수가 매우 많은 초다자유도 시스템
  • 반복 계산에서의 오차 누적(예: 시뮬레이션 시간 적분)
  • 비정칙 행렬의 역행렬 계산

5. 수치 안정 알고리즘 설계 원칙

5.1 불필요한 뺄셈 회피

가능한 한 크기가 비슷한 수의 뺄셈을 회피하도록 수식을 재구성한다.

예를 들어, 이차 방정식 ax^2 + bx + c = 0의 근의 공식에서 b^2 \gg 4ac일 때, 한 근은 소거에 의해 정밀도를 잃는다. 이를 방지하려면 다음과 같이 계산한다.

q = -\frac{1}{2}\left(b + \text{sign}(b)\sqrt{b^2 - 4ac}\right), \quad x_1 = \frac{q}{a}, \quad x_2 = \frac{c}{q}

5.2 보상 합산

Kahan 보상 합산(compensated summation)은 부동 소수점 덧셈에서의 반올림 오차를 추적하고 보상하는 기법이다. n개의 수를 더할 때, 단순 합산의 오차가 O(nu)인 반면 Kahan 합산의 오차는 O(u)이다.

알고리즘은 다음과 같다.

\begin{aligned} & s = 0, \quad c = 0 \\ & \text{for } i = 1, \ldots, n: \\ & \quad y = a_i - c \\ & \quad t = s + y \\ & \quad c = (t - s) - y \\ & \quad s = t \end{aligned}

여기서 c는 누적된 보상 값(compensation)이다.

5.3 직교 행렬의 재정규화

순기구학 계산에서 연쇄 곱을 반복하면 회전 행렬이 직교 조건 \mathbf{R}^T\mathbf{R} = \mathbf{I}을 점차 위반하게 된다. 이를 방지하기 위해 주기적으로 재정규화(re-normalization)를 수행해야 한다.

SVD를 이용한 가장 가까운 직교 행렬로의 사영(projection)은 다음과 같다.

\mathbf{R}_{\text{corrected}} = \mathbf{U}\mathbf{V}^T

여기서 \mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^T = \text{SVD}(\mathbf{R}_{\text{drifted}})이다. 단, \det(\mathbf{U}\mathbf{V}^T) = +1을 확인하여 적절한 회전(proper rotation)을 보장해야 한다.

6. 로봇공학 계산에서의 실용적 지침

로봇공학의 수치 계산에서 반올림 오차를 관리하기 위한 실용적 지침은 다음과 같다.

정밀도 선택: 실시간 제어에서는 배정밀도(double precision)를 기본으로 사용한다. 단정밀도(single precision)는 유효 숫자가 약 7자리에 불과하므로, 역기구학과 같은 비정칙 문제에서는 부적절하다.

조건수 모니터링: 선형 시스템을 풀기 전에 항상 조건수를 확인하고, \kappa(\mathbf{A}) > 1/u이면 해가 무의미할 수 있음을 인지한다.

알고리즘 선택: 정규 방정식(\mathbf{A}^T\mathbf{A}\mathbf{x} = \mathbf{A}^T\mathbf{b}) 대신 QR 분해나 SVD를 사용하여 최소 제곱 문제를 풀이한다. 정규 방정식은 조건수를 제곱시키므로(\kappa(\mathbf{A}^T\mathbf{A}) = \kappa(\mathbf{A})^2) 수치적으로 열등하다.

검증: 계산 결과를 원래 방정식에 대입하여 잔차(residual)를 확인한다. 잔차가 O(u\|\mathbf{A}\|\|\mathbf{x}\|) 수준이면 수치적으로 만족스러운 결과이다.

7. 참고 문헌

  • Higham, N. J. (2002). Accuracy and Stability of Numerical Algorithms (2nd ed.). SIAM.
  • Goldberg, D. (1991). “What Every Computer Scientist Should Know About Floating-Point Arithmetic.” ACM Computing Surveys, 23(1), 5–48.
  • Golub, G. H., & Van Loan, C. F. (2013). Matrix Computations (4th ed.). Johns Hopkins University Press.
  • Craig, J. J. (2005). Introduction to Robotics: Mechanics and Control (3rd ed.). Pearson Prentice Hall.
  • Overton, M. L. (2001). Numerical Computing with IEEE Floating Point Arithmetic. SIAM.
  • Trefethen, L. N., & Bau, D. (1997). Numerical Linear Algebra. SIAM.

v 0.1