부동소수점 오차 (Floating-Point Error)
쉽게 풀면
컴퓨터는 무한히 많은 자릿수를 가진 실수를 정해진 개수의 비트만으로 표현해야 하기 때문에, 아무리 정밀해도 어쩔 수 없이 아주 작은 오차가 생긴다. 0.1처럼 간단해 보이는 소수조차 컴퓨터 내부에서는 정확히 표현되지 않고 근사값으로 저장된다. 이런 작은 오차들이 수많은 계산을 거치며 누적되면 예상치 못한 결과를 낳을 수 있어 수치 계산에서 항상 염두에 두어야 하는 문제다.
왜 중요한가
대규모 수치 시뮬레이션이나 딥러닝 학습처럼 수백만 번 이상의 연산을 반복하는 계산에서는 아주 작은 부동소수점 오차도 누적되어 결과의 재현성이나 수치적 안정성에 영향을 줄 수 있습니다. 그래서 전산학, 계산과학, 공학 시뮬레이션 분야의 논문은 사용한 자료형(단정밀도/배정밀도)이나 오차 허용범위를 명시해 결과의 신뢰도를 뒷받침하는 경우가 많으며, 이는 다른 연구자가 결과를 재현하거나 알고리즘을 비교할 때 중요한 판단 근거가 됩니다.
논문에서는 이렇게 쓰입니다
대규모 반복 계산이나 딥러닝 학습에서 부동소수점 오차의 누적은 재현성 문제나 수치적 불안정성의 원인이 될 수 있다.
딥러닝 연구에서 연산 정밀도 선택이 학습 결과에 미치는 영향을 다룬 예이다.
계산과학·공학 시뮬레이션 분야에서 장기간 반복 계산에 따른 오차 누적 문제를 다룬 예이다.
조금 더 깊게 보면
부동소수점 오차는 크게 표현 자체의 한계로 생기는 반올림 오차와, 크기가 매우 다른 두 수를 연산할 때 작은 값의 정보가 소실되는 자릿수 손실(catastrophic cancellation) 같은 현상으로 나눌 수 있습니다. 이런 오차가 얼마나 증폭되는지는 문제 자체의 민감도를 나타내는 조건수(condition number)와 밀접하게 관련되어 있으며, 조건수가 큰 문제일수록 같은 크기의 부동소수점 오차라도 결과에 더 큰 영향을 줄 수 있습니다. 따라서 정밀도 선택뿐 아니라 알고리즘 자체의 수치적 안정성을 함께 고려하는 것이 중요합니다.
주의할 점
부동소수점 수끼리 등호(==)로 정확히 같은지 비교하는 것은 위험하며, 일반적으로 작은 허용오차 범위 안에 있는지를 확인해야 한다.