@@ -32,7 +32,7 @@ <h1><a href="index.html">All files</a> base.js</h1>
3232 < div class ='fl pad1y space-right2 '>
3333 < span class ="strong "> 100% </ span >
3434 < span class ="quiet "> Branches</ span >
35- < span class ='fraction '> 17/17 </ span >
35+ < span class ='fraction '> 18/18 </ span >
3636 </ div >
3737
3838
@@ -265,49 +265,47 @@ <h1><a href="index.html">All files</a> base.js</h1>
265265< span class ="cline-any cline-yes "> 3x</ span >
266266< span class ="cline-any cline-yes "> 3x</ span >
267267< span class ="cline-any cline-yes "> 3x</ span >
268- < span class ="cline-any cline-yes "> 28x</ span >
269- < span class ="cline-any cline-yes "> 28x</ span >
270- < span class ="cline-any cline-yes "> 28x</ span >
271- < span class ="cline-any cline-yes "> 28x</ span >
272- < span class ="cline-any cline-yes "> 28x</ span >
273- < span class ="cline-any cline-yes "> 28x</ span >
274- < span class ="cline-any cline-yes "> 28x</ span >
275- < span class ="cline-any cline-yes "> 28x</ span >
276- < span class ="cline-any cline-yes "> 28x</ span >
277- < span class ="cline-any cline-yes "> 28x</ span >
278- < span class ="cline-any cline-yes "> 28x</ span >
279- < span class ="cline-any cline-yes "> 28x</ span >
280- < span class ="cline-any cline-yes "> 28x</ span >
281- < span class ="cline-any cline-yes "> 28x</ span >
282- < span class ="cline-any cline-yes "> 28x</ span >
283- < span class ="cline-any cline-yes "> 28x</ span >
284- < span class ="cline-any cline-yes "> 28x</ span >
285- < span class ="cline-any cline-yes "> 4x</ span >
286- < span class ="cline-any cline-yes "> 4x</ span >
287- < span class ="cline-any cline-yes "> 4x</ span >
288- < span class ="cline-any cline-yes "> 4x</ span >
289- < span class ="cline-any cline-yes "> 4x</ span >
290- < span class ="cline-any cline-yes "> 4x</ span >
291- < span class ="cline-any cline-yes "> 4x</ span >
292- < span class ="cline-any cline-yes "> 4x</ span >
293- < span class ="cline-any cline-yes "> 10x</ span >
294- < span class ="cline-any cline-yes "> 10x</ span >
295- < span class ="cline-any cline-yes "> 10x</ span >
296- < span class ="cline-any cline-yes "> 24x</ span >
297- < span class ="cline-any cline-yes "> 24x</ span >
298- < span class ="cline-any cline-yes "> 24x</ span >
299- < span class ="cline-any cline-yes "> 10x</ span >
300- < span class ="cline-any cline-yes "> 10x</ span >
301- < span class ="cline-any cline-yes "> 10x</ span >
302- < span class ="cline-any cline-yes "> 28x</ span >
303- < span class ="cline-any cline-yes "> 14x</ span >
304- < span class ="cline-any cline-yes "> 14x</ span >
305- < span class ="cline-any cline-yes "> 14x</ span >
306- < span class ="cline-any cline-yes "> 14x</ span >
307- < span class ="cline-any cline-yes "> 14x</ span >
268+ < span class ="cline-any cline-yes "> 3x</ span >
269+ < span class ="cline-any cline-yes "> 3x</ span >
270+ < span class ="cline-any cline-yes "> 3x</ span >
271+ < span class ="cline-any cline-yes "> 3x</ span >
272+ < span class ="cline-any cline-yes "> 39x</ span >
273+ < span class ="cline-any cline-yes "> 39x</ span >
274+ < span class ="cline-any cline-yes "> 39x</ span >
275+ < span class ="cline-any cline-yes "> 39x</ span >
276+ < span class ="cline-any cline-yes "> 39x</ span >
277+ < span class ="cline-any cline-yes "> 39x</ span >
278+ < span class ="cline-any cline-yes "> 39x</ span >
279+ < span class ="cline-any cline-yes "> 39x</ span >
280+ < span class ="cline-any cline-yes "> 39x</ span >
281+ < span class ="cline-any cline-yes "> 39x</ span >
282+ < span class ="cline-any cline-yes "> 39x</ span >
283+ < span class ="cline-any cline-yes "> 39x</ span >
284+ < span class ="cline-any cline-yes "> 26x</ span >
285+ < span class ="cline-any cline-yes "> 26x</ span >
286+ < span class ="cline-any cline-yes "> 26x</ span >
287+ < span class ="cline-any cline-yes "> 26x</ span >
288+ < span class ="cline-any cline-yes "> 26x</ span >
289+ < span class ="cline-any cline-yes "> 26x</ span >
290+ < span class ="cline-any cline-yes "> 26x</ span >
291+ < span class ="cline-any cline-yes "> 12x</ span >
292+ < span class ="cline-any cline-yes "> 12x</ span >
293+ < span class ="cline-any cline-yes "> 12x</ span >
294+ < span class ="cline-any cline-yes "> 27x</ span >
295+ < span class ="cline-any cline-yes "> 27x</ span >
296+ < span class ="cline-any cline-yes "> 27x</ span >
297+ < span class ="cline-any cline-yes "> 48x</ span >
298+ < span class ="cline-any cline-yes "> 48x</ span >
299+ < span class ="cline-any cline-yes "> 48x</ span >
300+ < span class ="cline-any cline-yes "> 27x</ span >
301+ < span class ="cline-any cline-yes "> 27x</ span >
302+ < span class ="cline-any cline-yes "> 27x</ span >
303+ < span class ="cline-any cline-yes "> 12x</ span >
304+ < span class ="cline-any cline-yes "> 12x</ span >
308305< span class ="cline-any cline-yes "> 14x</ span >
309306< span class ="cline-any cline-yes "> 14x</ span >
310307< span class ="cline-any cline-yes "> 14x</ span >
308+ < span class ="cline-any cline-yes "> 26x</ span >
311309< span class ="cline-any cline-yes "> 32x</ span >
312310< span class ="cline-any cline-yes "> 32x</ span >
313311< span class ="cline-any cline-yes "> 32x</ span >
@@ -317,41 +315,43 @@ <h1><a href="index.html">All files</a> base.js</h1>
317315< span class ="cline-any cline-yes "> 32x</ span >
318316< span class ="cline-any cline-yes "> 32x</ span >
319317< span class ="cline-any cline-yes "> 32x</ span >
320- < span class ="cline-any cline-yes "> 24x</ span >
321- < span class ="cline-any cline-yes "> 3x</ span >
322- < span class ="cline-any cline-yes "> 3x</ span >
323- < span class ="cline-any cline-yes "> 3x</ span >
324- < span class ="cline-any cline-yes "> 3x</ span >
325- < span class ="cline-any cline-yes "> 3x</ span >
326- < span class ="cline-any cline-yes "> 3x</ span >
327- < span class ="cline-any cline-yes "> 3x</ span >
328- < span class ="cline-any cline-yes "> 3x</ span >
329- < span class ="cline-any cline-yes "> 3x</ span >
330- < span class ="cline-any cline-yes "> 7x</ span >
331- < span class ="cline-any cline-yes "> 7x</ span >
332- < span class ="cline-any cline-yes "> 18x</ span >
333- < span class ="cline-any cline-yes "> 18x</ span >
334- < span class ="cline-any cline-yes "> 18x</ span >
335- < span class ="cline-any cline-yes "> 18x</ span >
336- < span class ="cline-any cline-yes "> 7x</ span >
337- < span class ="cline-any cline-yes "> 7x</ span >
338- < span class ="cline-any cline-yes "> 10x</ span >
339- < span class ="cline-any cline-yes "> 7x</ span >
340- < span class ="cline-any cline-yes "> 7x</ span >
341- < span class ="cline-any cline-yes "> 7x</ span >
342- < span class ="cline-any cline-yes "> 7x</ span >
343- < span class ="cline-any cline-yes "> 7x</ span >
318+ < span class ="cline-any cline-yes "> 14x</ span >
319+ < span class ="cline-any cline-yes "> 14x</ span >
344320< span class ="cline-any cline-yes "> 13x</ span >
345321< span class ="cline-any cline-yes "> 13x</ span >
346322< span class ="cline-any cline-yes "> 13x</ span >
347- < span class ="cline-any cline-yes "> 31x</ span >
348- < span class ="cline-any cline-yes "> 31x</ span >
349- < span class ="cline-any cline-yes "> 31x</ span >
350- < span class ="cline-any cline-yes "> 31x</ span >
351323< span class ="cline-any cline-yes "> 13x</ span >
352- < span class ="cline-any cline-yes "> 7x</ span >
353- < span class ="cline-any cline-yes "> 28x</ span >
354- < span class ="cline-any cline-yes "> 28x</ span >
324+ < span class ="cline-any cline-yes "> 13x</ span >
325+ < span class ="cline-any cline-yes "> 13x</ span >
326+ < span class ="cline-any cline-yes "> 13x</ span >
327+ < span class ="cline-any cline-yes "> 39x</ span >
328+ < span class ="cline-any cline-yes "> 4x</ span >
329+ < span class ="cline-any cline-yes "> 4x</ span >
330+ < span class ="cline-any cline-yes "> 4x</ span >
331+ < span class ="cline-any cline-yes "> 8x</ span >
332+ < span class ="cline-any cline-yes "> 8x</ span >
333+ < span class ="cline-any cline-yes "> 20x</ span >
334+ < span class ="cline-any cline-yes "> 20x</ span >
335+ < span class ="cline-any cline-yes "> 20x</ span >
336+ < span class ="cline-any cline-yes "> 20x</ span >
337+ < span class ="cline-any cline-yes "> 8x</ span >
338+ < span class ="cline-any cline-yes "> 8x</ span >
339+ < span class ="cline-any cline-yes "> 4x</ span >
340+ < span class ="cline-any cline-yes "> 4x</ span >
341+ < span class ="cline-any cline-yes "> 9x</ span >
342+ < span class ="cline-any cline-yes "> 9x</ span >
343+ < span class ="cline-any cline-yes "> 9x</ span >
344+ < span class ="cline-any cline-yes "> 39x</ span >
345+ < span class ="cline-any cline-yes "> 17x</ span >
346+ < span class ="cline-any cline-yes "> 17x</ span >
347+ < span class ="cline-any cline-yes "> 39x</ span >
348+ < span class ="cline-any cline-yes "> 39x</ span >
349+ < span class ="cline-any cline-yes "> 39x</ span >
350+ < span class ="cline-any cline-yes "> 39x</ span >
351+ < span class ="cline-any cline-yes "> 17x</ span >
352+ < span class ="cline-any cline-yes "> 17x</ span >
353+ < span class ="cline-any cline-yes "> 9x</ span >
354+ < span class ="cline-any cline-yes "> 39x</ span >
355355< span class ="cline-any cline-yes "> 3x</ span >
356356< span class ="cline-any cline-yes "> 3x</ span >
357357< span class ="cline-any cline-yes "> 3x</ span >
@@ -390,9 +390,13 @@ <h1><a href="index.html">All files</a> base.js</h1>
390390/**
391391* Generates a single-precision floating-point Vandermonde matrix.
392392*
393+ * ## Notes
394+ *
395+ * - The implementation uses recursive multiplication to generate successive powers, which carries risk of additional accumulated floating-point error; however, for most use cases, such additional error should be negligible and not problematic.
396+ *
393397* @private
394398* @param {integer} mode - mode indicating whether to generate increasing or decreasing powers
395- * @param {NonNegativeInteger} M - number of rows in `out` and number of indexed elements in `x`
399+ * @param {NonNegativeInteger} M - number of rows in `out`
396400* @param {NonNegativeInteger} N - number of columns in `out`
397401* @param {Float32Array} x - input array
398402* @param {integer} strideX - stride length for `x`
@@ -413,89 +417,85 @@ <h1><a href="index.html">All files</a> base.js</h1>
413417* // out => <Float32Array>[ 1.0, 1.0, 1.0, 4.0, 2.0, 1.0, 9.0, 3.0, 1.0 ]
414418*/
415419function svander( mode, M, N, x, strideX, offsetX, out, strideOut1, strideOut2, offsetOut ) {
416- var isrm;
417420 var do0;
418421 var do1;
419422 var S0;
420423 var S1;
421- var sx;
422424 var io;
423425 var ix;
424426 var i0;
425427 var i1;
426428
427429 // Note on variable naming convention: S#, do#, io, i# where # corresponds to the loop number, with `0` being the innermost loop...
428- isrm = isRowMajor( [ strideOut1, strideOut2 ] );
429- sx = strideX;
430-
431- if ( isrm && mode > 0 ) {
432- // Row-major, increasing: x^0, x^1, ..., x^(N-1)
430+ if ( isRowMajor( [ strideOut1, strideOut2 ] ) ) {
433431 S0 = N;
434432 S1 = M;
435433 do0 = strideOut2;
436434 do1 = strideOut1 - ( S0*strideOut2 );
437- io = offsetOut ;
438- ix = offsetX;
439- for ( i1 = 0; i1 < S1; i1++ ) {
440- out[ io ] = 1.0 ;
441- io += do0 ;
442- for ( i0 = 1; i0 < S0; i0 ++ ) {
443- out[ io ] = out[ io - do0 ] * x[ ix ] ;
435+   ;
436+ // Increasing: x^0, x^1, ..., x^(N-1)
437+ if ( mode > 0 ) {
438+ io = offsetOut ;
439+ ix = offsetX ;
440+ for ( i1 = 0; i1 < S1; i1 ++ ) {
441+ out[ io ] = 1.0 ;
444442 io += do0;
443+ for ( i0 = 1; i0 < S0; i0++ ) {
444+ out[ io ] = out[ io-do0 ] * x[ ix ];
445+ io += do0;
446+ }
447+ ix += strideX;
448+ io += do1;
445449 }
446- ix += sx;
447- io += do1;
450+ return out;
448451 }
449- } else if ( isrm ) {
450- // Row-major, decreasing: x^(N-1), x^(N-2), ..., x^0
451- S0 = N;
452- S1 = M;
453- do0 = strideOut2;
454- do1 = strideOut1 + ( S0*strideOut2 );
455- io = offsetOut + ( ( S0-1 ) * do0 );
456- ix = offsetX;
457- for ( i1 = 0; i1 < S1; i1++ ) {
452+ // Decreasing: x^(N-1), x^(N-2), ..., x^0
453+ io = offsetOut + ( ( S1-1 ) * strideOut1 ) + ( ( S0-1 ) * strideOut2 );
454+ ix = offsetX + ( ( S1-1 ) * strideX );
455+ for ( i1 = S1-1; i1 >= 0; i1-- ) {
458456 out[ io ] = 1.0;
459457 io -= do0;
460458 for ( i0 = 1; i0 < S0; i0++ ) {
461- out[ io ] = out[ io + do0 ] * x[ ix ];
459+ out[ io ] = out[ io+ do0 ] * x[ ix ];
462460 io -= do0;
463461 }
464- ix += sx ;
465- io + = do1;
462+ ix -= strideX ;
463+ io - = do1;
466464 }
467- } else if ( mode > 0 ) {
468- // Column-major, increasing: column j contains x^j
469- S0 = M;
470- S1 = N;
471- do0 = strideOut1;
472- do1 = strideOut2 - ( S0*strideOut1 );
473- io = offsetOut;
474- sfill( S0, 1.0, out, do0, io );
475- io += strideOut2;
465+ return out;
466+ }
467+ // Column-major...
468+ S0 = M;
469+ S1 = N;
470+ do0 = strideOut1;
471+ do1 = strideOut2 - ( S0*strideOut1 );
472+
473+ // Increasing: column j contains x^j
474+ if ( mode > 0 ) {
475+ sfill( S0, 1.0, out, strideOut1, offsetOut );
476+ io = offsetOut + strideOut2;
476477 for ( i1 = 1; i1 < S1; i1++ ) {
477478 ix = offsetX;
478479 for ( i0 = 0; i0 < S0; i0++ ) {
479- out[ io ] = out[ io - strideOut2 ] * x[ ix ];
480- ix += sx ;
480+ out[ io ] = out[ io- strideOut2 ] * x[ ix ];
481+ ix += strideX ;
481482 io += do0;
482483 }
483484 io += do1;
484485 }
485- } else {
486- // Column-major, decreasing: column 0 contains x^(N-1), last column all ones
487- S0 = M;
488- S1 = N;
489- sfill( S0, 1.0, out, strideOut1, offsetOut + ( ( S1-1 ) * strideOut2 ) );
490- for ( i1 = S1 - 2; i1 >= 0; i1-- ) {
491- io = offsetOut + ( i1 * strideOut2 );
492- ix = offsetX;
493- for ( i0 = 0; i0 < S0; i0++ ) {
494- out[ io ] = out[ io + strideOut2 ] * x[ ix ];
495- ix += sx;
496- io += strideOut1;
497- }
486+ return out;
487+ }
488+ // Decreasing: column 0 contains x^(N-1), last column all ones
489+ sfill( S0, 1.0, out, strideOut1, offsetOut + ( ( S1-1 ) * strideOut2 ) );
490+ io = offsetOut + ( ( S1-2 ) * strideOut2 ) + ( ( S0-1 ) * strideOut1 );
491+ for ( i1 = S1-2; i1 >= 0; i1-- ) {
492+ ix = offsetX + ( ( S0-1 ) * strideX );
493+ for ( i0 = S0-1; i0 >= 0; i0-- ) {
494+ out[ io ] = out[ io+strideOut2 ] * x[ ix ];
495+ ix -= strideX;
496+ io -= do0;
498497 }
498+ io -= do1;
499499 }
500500 return out;
501501}
@@ -511,7 +511,7 @@ <h1><a href="index.html">All files</a> base.js</h1>
511511 < div class ='footer quiet pad2 space-top1 center small '>
512512 Code coverage generated by
513513 < a href ="https://istanbul.js.org/ " target ="_blank " rel ="noopener noreferrer "> istanbul</ a >
514- at 2026-04-16T07:11:28.038Z
514+ at 2026-04-16T09:06:07.016Z
515515 </ div >
516516 < script src ="prettify.js "> </ script >
517517 < script >
0 commit comments