피드로 돌아가기
Summing 50,000 emission line items in the wrong order changes your total
Dev.toDev.to
Backend

IEEE 754 부동소수점 오차 해결을 통한 탄소 배출량 합계의 재현성 확보

Summing 50,000 emission line items in the wrong order changes your total

Jeremiah Say2026년 6월 12일6intermediate

Context

수만 개의 배출량 데이터를 합산하는 과정에서 IEEE 754 Floating-point의 정밀도 한계로 인한 합계 불일치 발생. 특히 데이터의 Magnitude Spread가 클 때 합산 순서에 따라 결과값이 변하는 Non-associative 특성이 Audit 과정의 데이터 불일치 리스크로 작용함.

Technical Solution

  • Naive Summation 시 발생하는 Mantissa 비트 손실 문제를 해결하기 위한 Kahan Summation 알고리즘 도입
  • 별도의 Compensation 변수를 통해 이전 단계에서 유실된 Low-order bits를 추적하고 다음 연산에 재반영하는 구조 설계
  • (t - sum) - y 연산을 통해 실제 합산에 반영되지 못한 오차항(Error term)을 정밀하게 추출하는 로직 적용
  • 데이터 정렬 순서와 무관하게 동일한 결과값을 보장하는 Order-independent 합산 메커니즘 구현
  • Floating-point 기반 시스템에서 구조적 변경 없이 적용 가능한 Low-invasive 해결책 채택

- 수천 건 이상의 대량 행 데이터를 합산하는 기능 설계 시 데이터 간 Magnitude 차이 분석 - 외부 감사나 데이터 검증이 필요한 재현성 필수 시스템의 경우 Naive Summation 사용 지양 - 부동소수점 오차 방지를 위해 Kahan Summation 도입 또는 Fixed-point(정수 단위 계산) 전환 검토 - Toy dataset이 아닌 실제 운영 규모의 데이터셋을 통한 정밀도 테스트 케이스 확보

원문 읽기