Skip to content

Commit ff55902

Browse files
committed
refactor: pointer arithmetic
--- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
1 parent d50308b commit ff55902

File tree

1 file changed

+40
-14
lines changed
  • lib/node_modules/@stdlib/lapack/base/dgebal/lib

1 file changed

+40
-14
lines changed

lib/node_modules/@stdlib/lapack/base/dgebal/lib/base.js

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* limitations under the License.
1717
*/
1818

19-
/* eslint-disable max-len, max-params, max-statements */
19+
/* eslint-disable max-len, max-params, max-statements, max-lines-per-function */
2020

2121
'use strict';
2222

@@ -226,8 +226,8 @@ function dgebal( job, N, A, strideA1, strideA2, offsetA, out, strideOut, offsetO
226226
}
227227
}
228228

229-
// Initialize `scale` for non-permuted submatrix
230-
is = offsetScale + (k*strideScale);
229+
// Initialize scale for non-permuted submatrix
230+
is = offsetScale + ( k * strideScale );
231231
for ( i = k; i <= l; i++ ) {
232232
scale[ is ] = 1.0;
233233
is += strideScale;
@@ -247,16 +247,25 @@ function dgebal( job, N, A, strideA1, strideA2, offsetA, out, strideOut, offsetO
247247

248248
noconv = true;
249249
while ( noconv ) {
250+
is = offsetScale + ( k * strideScale ); // Follows scale
251+
ia1 = offsetA + ( k * strideA1 ) + ( k * strideA2 ); // Follows A[ k, i ]
252+
ia2 = offsetA + ( k * strideA1 ) + ( k * strideA2 ); // Follows A[ i, k ]
253+
ia3 = offsetA + ( k * strideA2 ); // follows `i`th column of A
254+
250255
noconv = false;
251256
for ( i = k; i <= l; i++ ) {
252-
c = dnrm2( l-k+1, A, strideA1, offsetA + (k*strideA1) + (i*strideA2) );
253-
r = dnrm2( l-k+1, A, strideA2, offsetA + (i*strideA1) + (k*strideA2) );
254-
ica = idamax( l+1, A, strideA1, offsetA + (i*strideA2) );
257+
c = dnrm2( l-k+1, A, strideA1, ia1 );
258+
r = dnrm2( l-k+1, A, strideA2, ia2 );
259+
ica = idamax( l+1, A, strideA1, ia3 );
255260
ca = abs( A[ offsetA + (ica*strideA1) + (i*strideA2) ] );
256-
ira = idamax( N-k+1, A, strideA2, offsetA + (i*strideA1) + (k*strideA2) );
261+
ira = idamax( N-k+1, A, strideA2, ia2 );
257262
ra = abs( A[ offsetA + (i*strideA1) + ((ira+k)*strideA2) ] );
258263

259264
if ( c === 0.0 || r === 0.0 ) {
265+
ia1 += strideA2;
266+
ia2 += strideA1;
267+
is += strideScale;
268+
ia3 += strideA2;
260269
continue;
261270
}
262271

@@ -290,27 +299,44 @@ function dgebal( job, N, A, strideA1, strideA2, offsetA, out, strideOut, offsetO
290299

291300
// Now balance
292301
if ( ( c + r ) >= factor * s ) {
302+
ia1 += strideA2;
303+
ia2 += strideA1;
304+
is += strideScale;
305+
ia3 += strideA2;
293306
continue;
294307
}
295308

296-
if ( f < 1.0 && scale[ offsetScale + (i*strideScale) ] < 1.0 ) {
297-
if ( f * scale[ offsetScale + (i*strideScale) ] <= sfmin1 ) {
309+
if ( f < 1.0 && scale[ is ] < 1.0 ) {
310+
if ( f * scale[ is ] <= sfmin1 ) {
311+
ia1 += strideA2;
312+
ia2 += strideA1;
313+
is += strideScale;
314+
ia3 += strideA2;
298315
continue;
299316
}
300317
}
301318

302-
if ( f > 1.0 && scale[ offsetScale + (i*strideScale) ] > 1.0 ) {
303-
if ( scale[ offsetScale + (i*strideScale) ] >= sfmax1 / f ) {
319+
if ( f > 1.0 && scale[ is ] > 1.0 ) {
320+
if ( scale[ is ] >= sfmax1 / f ) {
321+
ia1 += strideA2;
322+
ia2 += strideA1;
323+
is += strideScale;
324+
ia3 += strideA2;
304325
continue;
305326
}
306327
}
307328

308329
g = 1.0 / f;
309-
scale[ offsetScale + (i*strideScale) ] *= f;
330+
scale[ is ] *= f;
310331
noconv = true;
311332

312-
dscal( N-k, g, A, strideA2, offsetA + (i*strideA1) + (k*strideA2) );
313-
dscal( l+1, f, A, strideA1, offsetA + (i*strideA2) );
333+
dscal( N-k, g, A, strideA2, ia2 );
334+
dscal( l+1, f, A, strideA1, ia3 );
335+
336+
ia1 += strideA2;
337+
ia2 += strideA1;
338+
is += strideScale;
339+
ia3 += strideA2;
314340
}
315341
}
316342

0 commit comments

Comments
 (0)