Performance Test
HTML
<div id="results"></div>
<div id="items"></div>
CSS
#results {
font:icon;
font-size:11px;
}
.info {color:green;}
.error {color:red;}
JavaScript
var measure = (function() {
var iterations = 10000,
$results = $('#results');
var count = 0;
function log(msg) {
console.log(msg);
$results.append('<p class="info">' + ++count + '. ' + msg + '</p>');
}
function error(msg) {
console.error(msg);
$results.append('<p class="error">' + ++count + '. ' + msg + '</p>');
}
function measure(arg) {
if ($.isArray(arg)) {
measureMultiple(arg);
} else if ($.isFunction(arg)) {
measureOne(arg);
}
}
function measureMultiple(funcs) {
for (var i=0, len=funcs.length; i<len; ++i) {
measureOne(funcs[i]);
}
}
function measureOne(func) {
var start, end, duration;
try {
start = new Date().getTime();
for (var i = 0; i < iterations; ++i) {
func();
}
end = new Date().getTime();
duration = end - start;
log(func.name + ' completed in ' + duration + ' ms.');
} catch (err) {
error(func.name + ' ' + err);
}
}
return measure;
})();
$items = $('#items');
const COUNT = 7312;
let values = [], shifts = [];
for (let i = 0; i < COUNT; ++i) {
values.push(Math.random())
shifts.push(Math.round(Math.random()*300)-150)
}
const arrayBuffer = new ArrayBuffer(8),
nativeFloat = new Float64Array(arrayBuffer),
nativeUint16 = new Uint16Array(arrayBuffer);
function ldexp1( float, shiftCount )
{
nativeFloat[0] = float;
nativeUint16[3] += shiftCount << 4;
return nativeFloat[0];
}
const dataView = new DataView(arrayBuffer);
function ldexp0( float, shiftCount )
{
dataView.setFloat64(0,float);
const lo16 = dataView.getUint16(0);
dataView.setUint16( 0, lo16 + ( shiftCount << 4 ) );
return dataView.getFloat64( 0 );
}
function ldexp2(float,shiftCount)
{
return float * 2 ** shiftCount;
}
function viaLdExp0()...