Skip to content

Latest commit

 

History

History
142 lines (87 loc) · 3.67 KB

File metadata and controls

142 lines (87 loc) · 3.67 KB

scusumkbn

Compute the cumulative sum of a one-dimensional single-precision floating-point ndarray using an improved Kahan–Babuška algorithm.

Usage

var scusumkbn = require( '@stdlib/blas/ext/base/ndarray/scusumkbn' );

scusumkbn( arrays )

Computes the cumulative sum of a one-dimensional single-precision floating-point ndarray using an improved Kahan–Babuška algorithm.

var Float32Array = require( '@stdlib/array/float32' );
var scalar2ndarray = require( '@stdlib/ndarray/base/from-scalar' );
var ndarray = require( '@stdlib/ndarray/base/ctor' );

var xbuf = new Float32Array( [ 1.0, 3.0, 4.0, 2.0 ] );
var x = new ndarray( 'float32', xbuf, [ 4 ], [ 1 ], 0, 'row-major' );

var ybuf = new Float32Array( [ 0.0, 0.0, 0.0, 0.0 ] );
var y = new ndarray( 'float32', ybuf, [ 4 ], [ 1 ], 0, 'row-major' );

var initial = scalar2ndarray( 0.0, 'float32', 'row-major' );

var v = scusumkbn( [ x, y, initial ] );
// returns <ndarray>[ 1.0, 4.0, 8.0, 10.0 ]

var bool = ( v === y );
// returns true

The function has the following parameters:

  • arrays: array-like object containing a one-dimensional input ndarray, a one-dimensional output ndarray, and a zero-dimensional ndarray containing the initial sum.

Notes

  • If provided an empty one-dimensional input ndarray, the function returns the output ndarray unchanged.

Examples

var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var ndarray = require( '@stdlib/ndarray/base/ctor' );
var zerosLike = require( '@stdlib/ndarray/zeros-like' );
var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var scusumkbn = require( '@stdlib/blas/ext/base/ndarray/scusumkbn' );

var xbuf = discreteUniform( 10, -50, 50, {
    'dtype': 'float32'
});
var x = new ndarray( 'float32', xbuf, [ xbuf.length ], [ 1 ], 0, 'row-major' );
console.log( ndarray2array( x ) );

var y = zerosLike( x );
console.log( ndarray2array( y ) );

var initial = scalar2ndarray( 100.0, {
    'dtype': 'float32'
});

var v = scusumkbn( [ x, y, initial ] );
console.log( ndarray2array( v ) );

References

  • Neumaier, Arnold. 1974. "Rounding Error Analysis of Some Methods for Summing Finite Sums." Zeitschrift Für Angewandte Mathematik Und Mechanik 54 (1): 39–51. doi:10.1002/zamm.19740540106.