Script Preparation code:
x
 
var i;
var r;
var v = 2**16;
function test1() {
  for(i=0; i < 1000; ++i) {
    r = 1 / Math.sqrt(v);
  }
}
function test2() {
  for(i=0; i < 1000; ++i) {
    r = Q_rsqrt(v);
  }
}
//Based on the fast inverse square root function
// https://en.wikipedia.org/wiki/Fast_inverse_square_root
// Some original comments preserved for humor value
// Designed to try to mimic the original as closely as possible
function Q_rsqrt(number)
{ 
    var i;
    var x2, y;
    const threehalfs = 1.5;
  
    x2 = number * 0.5;
    y = number;
    //evil floating bit level hacking
    var buf = new ArrayBuffer(4);
    (new Float32Array(buf))[0] = number;
    i =  (new Uint32Array(buf))[0];
    i = (0x5f3759df - (i >> 1)); //What the fuck?
    (new Uint32Array(buf))[0] = i;
    y = (new Float32Array(buf))[0];
    y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
//  y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed
    return y;
}
Tests:
  • Math.sqrt

     
    test1();
  • Quakes fast inverse sqrt.

     
    test2();
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Math.sqrt
    Quakes fast inverse sqrt.

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 3 years ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36
Chrome 100 on Windows
View result in a separate tab
Test name Executions per second
Math.sqrt 6873.2 Ops/sec
Quakes fast inverse sqrt. 1472.3 Ops/sec