jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
testing fast inverse square root vs Math.sqrt
from http://gamedev.stackexchange.com/questions/30727/implement-fast-inverse-square-root-in-javascript
and http://coffeescriptcookbook.com/chapters/math/fast-inv-square
var buf = new ArrayBuffer(Float32Array.BYTES_PER_ELEMENT);
var fv = new Float32Array(buf);
var lv = new Uint32Array(buf);
var threehalfs = 1.5;
function Q_rsqrt(number) {
var x2 = number * 0.5;
fv[0] = number;
lv[0] = 0x5f3759df - ( lv[0] >> 1 );
var y = fv[0];
y = y * ( threehalfs - ( x2 * y * y ) );
return y;
}
var nums = [];
for(var i = 0; i < 10000; i++){
nums.push(Math.random()*100);
}
var approx_const_32, approx_const_64, approx_const_quake_32, fastInvSqrt_typed;
approx_const_quake_32 = 0x5f3759df;
approx_const_32 = 0x5f375a86;
approx_const_64 = 0x5fe6eb50c7aa19f9;
fastInvSqrt_typed = function(n, precision) {
var i, iter, y, _i;
if (precision == null) {
precision = 1;
}
y = new Float32Array(1);
i = new Int32Array(y.buffer);
y[0] = n;
i[0] = 0x5f375a86 - (i[0] >> 1);
for (iter = _i = 1; 1 <= precision ? _i < precision : _i > precision; iter = 1 <= precision ? ++_i : --_i) {
y[0] = y[0] * (1.5 - ((n * 0.5) * y[0] * y[0]));
}
return y[0];
};
Ready to run.
Test | Ops/sec | |
---|---|---|
1/Math.sqrt |
| ready |
Q_rsqrt() |
| ready |
fastInvSqrt_typed p=1 |
| ready |
fastInvSqrt_typed p=2 |
| ready |
fastInvSqrt_typed p=10 |
| ready |
fastInvSqrt_typed p=2 int |
| ready |
fastInvSqrt_typed p=10 |
| ready |
fastInvSqrt_typed p=2 int |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.