며칠 전 Thor's Hammer에서 제곱근 코드를 봤습니다. 이 원리는 여러 곳에서 소개되었으므로 자세한 내용은 다루지 않겠습니다.
소스 코드는 C 언어로 작성되어 있는데, 생각해 보니 이런 알고리즘도 자바스크립트로 완성할 수 있다는 걸 알았습니다.
function InvSqrt(x){ var h=0.5*x; var b=new ArrayBuffer(4); var d=new DataView(b,0); d.setFloat32(0,x); var i=d.getInt32(0); i=0x5f375a86-(i>>1); d.setInt32(0,i); var r=d.getFloat32(0); r=r*(1.5-h*r*r); return r; }
테스트:
console.time("t"); for(var i=0;i<10000000;i++){ InvSqrt(i); } console.timeEnd("t"); console.time("t"); for(var i=0;i<10000000;i++){ 1/Math.sqrt(i); } console.timeEnd("t"); VM2303:18 t: 33438.000ms VM2303:24 t: 16720.000ms
결과는 여전히 시스템 라이브러리에 비해 느리고 정확도도 본질적으로 낮습니다. 그러나 나는 만족한다.
위는 JavaScript를 이용한 산술 제곱근 알고리즘의 구현입니다. 코드가 매우 간단합니다. 필요하신 분들은 꼭 배워보세요. !