Trig table
by soulwire
JavaScript
function Tabulate( func, precision ) {
precision = precision || 2;
var TWO_PI = Math.PI * 2,
p = Math.pow( 10, precision ),
s = 1.0 / p,
n = 1.0 + TWO_PI * p,
a = new Float32Array( ~~n ),
i, t;
for ( i = 0, t = 0; i < n; i++, t += s ) a[ i ] = func( t );
return function( r ) {
return r >= 0
? a[ ~~( ( r % TWO_PI ) * p ) ]
: a[ ~~( ( TWO_PI + r % TWO_PI ) * p ) ];
}
}
// Test
var sin = new Tabulate( Math.sin, 4 );
var data = [];
for ( var i = 0; i < 10; i++ ) {
var n = -10 + Math.random() * 20;
var s1 = Math.sin( n );
var s2 = sin( n );
var d = Math.abs( s2 - s1 );
data.push({
radians: n,
original: s1,
tabulated: s2,
delta: d
});
}
console.table( data );