UNPKG

blas-dnrm2

Version:

Computes the L2 norm (Euclidean norm).

66 lines (57 loc) 1.17 kB
'use strict'; // MODULE // var abs = require( 'math-abs' ); var sqrt = require( 'math-sqrt' ); // DNRM2 // /** * FUNCTION: dnrm2( N, x, stride, offset ) * Computes the L2 norm. * * @param {Number} N - number of accessed elements * @param {Array|Int8Array|Uint8Array|Uint8ClampedArray|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} x - input array * @param {Number} stride - specifies how to index into `x` * @param {Number} offset - specifies where to begin indexing into `x` * @returns {Number|Void} norm or undefined */ function dnrm2( N, x, stride, offset ) { var val; var ix; var i; var r; var s; var t; if ( N < 0 || stride <= 0 || offset < 0 ) { return; } if ( N === 0 ) { return 0; } ix = offset; if ( N === 1 ) { return abs( x[ ix ] ); } t = 0; // scale s = 1; // sum of squares for ( i = 0; i < N; i++ ) { val = x[ ix ]; if ( val !== 0 ) { val = abs( val ); if ( val > t ) { r = t / val; s = 1 + s*r*r; t = val; } else { r = val / t; s = s + r*r; } } ix += stride; } return t * sqrt( s ); } // end FUNCTION dnrm2() // EXPORTS // module.exports = dnrm2;