빠른 역제곱근 계산기
퀘이크 III 소스코드로 유명해진 1/√x 근사 알고리즘의 비트 조작·뉴턴-랩슨 보정 과정을 단계별로 보여줍니다.
0보다 커야 합니다
단계별 계산
정확한 값과 비교
사용 방법
- 10보다 큰 숫자를 입력합니다.
- 2비트 패턴 재해석 → 매직 넘버 계산 → 뉴턴-랩슨 보정 과정을 확인합니다.
- 3실제 1/√x 값과의 상대오차를 확인합니다.
자주 묻는 질문
32비트 float x의 비트 패턴을 그대로 정수로 재해석한 뒤, 매직 넘버 0x5f3759df에서 그 정수를 절반(오른쪽으로 1비트 시프트)만큼 뺍니다. 그 결과를 다시 float로 재해석하면 이미 1/√x에 상당히 가까운 값이 나오고, 여기에 뉴턴-랩슨법 한 번을 더해 오차를 줄입니다.
IEEE754 float의 비트 패턴을 정수로 보면 그 값이 대략 log₂(x)에 비례합니다. 1/√x의 로그는 x의 로그의 -1/2배이므로, "정수로 재해석한 값을 절반으로 나눠 어떤 상수에서 뺀다"는 정수 연산이 로그 공간에서 x^(-1/2)를 구하는 것과 비슷한 효과를 냅니다. 매직 넘버는 이 근사에서 생기는 오차를 경험적으로 보정한 값입니다.
매직 넘버 계산 직후에는 실제 1/√x와 상대오차가 약 3~4% 납니다. 여기에 뉴턴-랩슨 보정을 한 번 더하면 상대오차가 0.2% 미만으로 20배 가까이 줄어듭니다 — 퀘이크 III는 이 한 번의 보정만으로 실시간 3D 그래픽스에 충분한 정확도를 얻었습니다.
ieee754-float는 숫자의 IEEE754 비트 구조 자체를 보여주는 도구입니다. 이 도구는 그 비트 구조를 이용하는 알고리즘 자체(매직 넘버 뺄셈, 뉴턴 보정)를 실행해서 실제 1/√x와 비교해 근사 오차를 보여주는 것이 목적입니다.
알아두면 좋은 점
- x=1, x=4 등에서 비트 패턴 정수값·매직 넘버 계산 결과·뉴턴 보정 결과를 실제로 실행해 검증했습니다(기억에 의존한 값이 아니라 이 계산기와 같은 알고리즘을 직접 돌려 나온 값입니다).
- 뉴턴 보정 전 상대오차가 약 3.4%, 보정 한 번 후 0.17% 근처로 줄어드는 것을 여러 값에서 확인했습니다.
- JavaScript는 C의 포인터 캐스팅이 없어 DataView로 4바이트 버퍼를 float로 썼다가 정수로 다시 읽는 방식으로 비트 재해석을 구현했습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.