처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.04.04 37

부동소수점 계산이 맨날 미세하게 틀리죠? Herbie가 수식을 자동으로 고쳐줍니다

Hacker News 원문 보기

0.1 + 0.2가 0.3이 아닌 세계에서 살고 있잖아요

개발을 좀 해보신 분이라면 한 번쯤 겪어봤을 거예요. JavaScript 콘솔에 0.1 + 0.2를 치면 0.30000000000000004가 나오는 그 당황스러운 순간이요. 이건 JavaScript만의 문제가 아니라, 컴퓨터가 소수점 숫자를 표현하는 방식(IEEE 754 부동소수점) 자체의 한계에서 오는 건데요. 대부분의 경우에는 "에이, 저 정도 오차야" 하고 넘어갈 수 있지만, 과학 시뮬레이션이나 금융 계산, 3D 그래픽 엔진처럼 수치 정밀도가 생명인 분야에서는 이 작은 오차가 눈덩이처럼 불어나서 결과를 완전히 뒤집어 놓기도 해요.

워싱턴 대학교(UW) 프로그래밍 언어 및 소프트웨어 공학 연구실에서 만든 Herbie는 바로 이 문제를 해결하려는 도구예요. 수학 수식을 입력하면, 같은 결과를 내면서도 부동소수점 오차가 훨씬 적은 형태로 수식을 자동 변환해주는 거죠. 사람이 수작업으로 수치 안정성(numerical stability)을 개선하려면 전문 지식도 필요하고 시간도 엄청 걸리는데, Herbie가 이걸 자동화해준다는 점에서 꽤 흥미로운 프로젝트예요.

Herbie가 하는 일, 좀 더 구체적으로

이게 뭐냐면, 수학적으로는 동일한 수식이라도 컴퓨터에서 계산하면 정밀도가 달라질 수 있다는 개념에서 출발해요. 예를 들어볼게요. sqrt(x+1) - sqrt(x)라는 수식이 있다고 해보죠. x가 아주 큰 수일 때, sqrt(x+1)sqrt(x)는 거의 비슷한 값이 되거든요. 비슷한 두 수를 빼면 유효숫자가 확 줄어드는데, 이걸 소거 오차(cancellation error)라고 불러요. 친구한테 10만 원 빌려줬다가 99,999원 돌려받으면 1원 남잖아요? 근데 그 1원의 정확도가 원래 10만 원 단위로 맞춰져 있던 거라 엄청 부정확해지는 것과 비슷한 원리예요.

Herbie는 이런 수식을 받아서 1 / (sqrt(x+1) + sqrt(x))처럼 수학적으로 동치이지만 소거 오차가 발생하지 않는 형태로 바꿔줘요. 내부적으로는 여러 가지 기법을 조합하는데요:

테일러 급수 전개: 특정 구간에서 수식을 다항식으로 근사해서 오차를 줄이는 방법이에요. 수학 시간에 배운 그 테일러 급수 맞아요. 특정 점 근처에서의 동작을 잘 캡처할 수 있거든요.

대수적 변환: 위 예시처럼 분자 유리화 같은 대수적 동치 변환을 적용해서 수치적으로 안정한 형태를 찾아요.

구간 분할(regime splitting): 입력 값의 범위에 따라 서로 다른 수식을 사용하는 거예요. x가 0 근처일 때는 A 수식이 정확하고, x가 클 때는 B 수식이 정확하다면, if-else로 나눠서 각각 가장 좋은 수식을 쓰는 식이죠.

Herbie는 이 모든 걸 자동 탐색하면서 수만 개의 샘플 포인트에 대해 원래 수식과 변환된 수식의 오차를 비교하고, 가장 정밀도가 높은 조합을 찾아줘요. 사용법도 꽤 직관적인데, 웹 인터페이스에서 수식을 입력하면 개선된 수식과 함께 오차가 얼마나 줄었는지 시각적으로 보여줘요.

이런 도구가 왜 필요한 걸까

"그냥 BigDecimal 쓰면 되지 않나?"라고 생각하실 수도 있어요. 맞아요, 임의 정밀도 라이브러리를 쓰면 오차 문제 자체는 해결돼요. 하지만 대가가 있죠. 속도가 수십~수백 배 느려지거든요. GPU 연산이나 실시간 시스템에서는 현실적으로 쓸 수 없는 경우가 많아요.

Herbie의 접근법은 다른 방향이에요. 64비트 부동소수점(double)을 그대로 쓰면서, 수식의 형태만 바꿔서 정밀도를 높이는 거예요. 하드웨어 성능을 그대로 활용하면서 소프트웨어 레벨에서 정밀도를 확보하는 셈이죠. 과학 컴퓨팅 커뮤니티에서 오래전부터 "numerical recipes"라고 해서 수치 안정성이 좋은 알고리즘 패턴들을 모아놓은 전통이 있는데, Herbie는 그 과정을 자동화한 것이라고 보면 돼요.

비슷한 분야의 도구로는 MPFR(다중 정밀도 부동소수점 라이브러리)이나 Wolfram Alpha의 수치 최적화 기능이 있지만, MPFR은 정밀도를 높이는 대신 느려지는 방식이고, Wolfram은 범용 도구라 이런 특화된 최적화에는 Herbie만큼 깊게 들어가지 않아요. 학술 도구 중에서는 Salsa나 FPTaylor처럼 부동소수점 오차를 분석해주는 도구들이 있는데, Herbie는 분석에서 한 발 더 나아가 "개선된 수식"까지 자동 생성해준다는 점이 차별점이에요.

한국 개발자에게 어떤 의미가 있을까

솔직히 말하면, 웹 개발이나 앱 개발 위주로 일하시는 분들에게는 당장 쓸 일이 많지 않을 수 있어요. 하지만 이런 분들은 한번 살펴보면 좋겠어요:

머신러닝 모델을 직접 구현하거나 커스텀 loss function을 짜시는 분들이요. 학습 과정에서 log-sum-exp 같은 수식의 수치 안정성이 모델 수렴에 직접적으로 영향을 미치거든요. 실제로 딥러닝 프레임워크들이 내부적으로 이런 수치 안정화 트릭을 많이 쓰고 있는데, 커스텀 연산을 만들 때는 직접 챙겨야 하는 부분이에요.

게임이나 시뮬레이션 개발하시는 분들도요. 물리 엔진에서 충돌 감지 계산이 부정확하면 오브젝트가 벽을 뚫고 지나가는 현상이 생기잖아요. 핵심 수식의 수치 안정성을 Herbie로 검증해보는 것도 방법이에요.

그리고 무엇보다, 부동소수점이 왜 이렇게 동작하는지 이해하는 데 Herbie의 웹 UI가 훌륭한 교육 도구가 돼요. 수식을 넣으면 어디서 오차가 커지는지, 왜 특정 변환이 더 정확한지 시각적으로 보여주니까요.

정리하자면

Herbie는 "부동소수점 수식을 넣으면 더 정확한 수식을 자동으로 찾아주는 도구"예요. 수치 안정성이라는 까다로운 문제를 자동화로 접근한다는 점에서, 해당 분야를 다루는 개발자에게는 상당히 실용적인 도구이고, 아니더라도 부동소수점의 세계를 이해하는 좋은 창구가 될 수 있어요.

여러분은 부동소수점 오차 때문에 고생한 경험이 있나요? 어떤 상황이었고 어떻게 해결하셨는지 궁금하네요.


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.