알고리즘 선택과 초기 구현
저자는 Rust와 Go에서 채택한 Eisel-Lemire 알고리즘을 선택했습니다. 이는 128비트 곱셈과 미리 계산된 5의 거듭제곱 테이블을 사용하여 소수점 문자열을 IEEE 754 부동소수점으로 변환합니다. 약 1,100라인의 C 코드로 구현된 초기 버전은 모든 테스트를 통과했으나, 벤치마크 결과 실제 웹 환경에서 흔히 쓰이는 짧은 숫자(예: 가격, 좌표)에서 기존 strtod보다 9% 느린 결과를 보였습니다.
하이브리드 최적화 전략
문제를 해결하기 위해 저자는 알고리즘을 완전히 교체하는 대신 다음과 같은 다단계 최적화 경로를 설계했습니다:
-
초고속 경로(Ultra-fast path): 3자리 이하의 정수나 간단한 소수점 이하 값을 산술 연산으로 즉시 처리합니다.
-
Eisel-Lemire: 복잡하고 정밀도가 높은 숫자에 적용합니다.
-
Fallback: 16진수 부동소수점이나 매우 긴 숫자는 기존 strtod로 처리합니다.
이러한 전략은 단순한 입력에 대한 오버헤드를 제거하면서도 복잡한 연산의 효율성을 극대화했습니다.