Skip to content

Commit fafa627

Browse files
committed
refactor: optimise loops
--- 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 d0d96ed commit fafa627

File tree

11 files changed

+84
-38
lines changed

11 files changed

+84
-38
lines changed

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

Lines changed: 70 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -43,31 +43,71 @@ var abs = require( '@stdlib/math/base/special/abs' );
4343
* @param {integer} strideA1 - stride of the first dimension of `A`
4444
* @param {integer} strideA2 - stride of the second dimension of `A`
4545
* @param {NonNegativeInteger} offsetA - starting index of `A`
46+
* @param {Float64Array} work - work array, should have `N` indexed elements
47+
* @param {integer} strideWork - stride length of `work`
48+
* @param {NonNegativeInteger} offsetWork - starting index of `work`
4649
* @returns {number} required norm value
4750
*
4851
* @example
4952
* var Float64Array = require( '@stdlib/array/float64' );
5053
*
5154
* var A = new Float64Array( [ 1.0, 4.0, 7.0, 10.0, 2.0, 5.0, 8.0, 11.0, 3.0, 6.0, 9.0, 12.0 ] );
55+
* var work = new Float64Array( 4 );
5256
*
53-
* var out = oneNorm( 3, 4, A, 4, 1, 0 );
57+
* var out = oneNorm( 3, 4, A, 4, 1, 0, work, 1, 0 );
5458
* // returns 33.0
5559
*/
56-
function oneNorm( M, N, A, strideA1, strideA2, offsetA ) {
60+
function oneNorm( M, N, A, strideA1, strideA2, offsetA, work, strideWork, offsetWork ) { // eslint-disable-line max-len
5761
var value;
62+
var temp;
5863
var ia1;
64+
var ia2;
5965
var sum;
66+
var iw;
67+
var i;
6068
var j;
6169

62-
value = 0.0;
63-
ia1 = offsetA;
64-
for ( j = 0; j < N; j++ ) {
65-
sum = dasum( M, A, strideA1, ia1 );
66-
if ( value < sum || isnan( sum ) ) {
67-
value = sum;
70+
if ( isRowMajor( [ strideA1, strideA2 ] ) ) {
71+
iw = offsetWork;
72+
for ( i = 0; i < N; i++ ) {
73+
work[ iw ] = 0.0;
74+
iw += strideWork;
75+
}
76+
77+
ia1 = offsetA;
78+
for ( j = 0; j < M; j++ ) {
79+
ia2 = 0;
80+
iw = offsetWork;
81+
for ( i = 0; i < N; i++ ) {
82+
work[ iw ] += abs( A[ ia1 + ia2 ] );
83+
iw += strideWork;
84+
ia2 += strideA2;
85+
}
86+
ia1 += strideA1;
87+
}
88+
89+
value = 0.0;
90+
91+
iw = offsetWork;
92+
for ( i = 0; i < N; i++ ) {
93+
temp = work[ iw ];
94+
if ( value < temp || isnan( temp ) ) {
95+
value = temp;
96+
}
97+
iw += strideWork;
98+
}
99+
} else {
100+
value = 0.0;
101+
ia1 = offsetA;
102+
for ( j = 0; j < N; j++ ) {
103+
sum = dasum( M, A, strideA1, ia1 );
104+
if ( value < sum || isnan( sum ) ) {
105+
value = sum;
106+
}
107+
ia1 += strideA2;
68108
}
69-
ia1 += strideA2;
70109
}
110+
71111
return value;
72112
}
73113

@@ -157,31 +197,30 @@ function maxAbs( M, N, A, strideA1, strideA2, offsetA ) {
157197
function infinityNorm( M, N, A, strideA1, strideA2, offsetA, work, strideWork, offsetWork ) { // eslint-disable-line max-len
158198
var value;
159199
var temp;
200+
var sum;
160201
var ia1;
161202
var ia2;
162203
var iw;
163204
var i;
164205
var j;
165206

166-
iw = offsetWork;
167-
for ( i = 0; i < M; i++ ) {
168-
work[ iw ] = 0.0;
169-
iw += strideWork;
170-
}
171-
172207
if ( isRowMajor( [ strideA1, strideA2 ] ) ) {
208+
value = 0.0;
173209
ia1 = offsetA;
174-
iw = offsetWork;
175-
for ( i = 0; i < M; i++ ) {
176-
ia2 = 0;
177-
for ( j = 0; j < N; j++ ) {
178-
work[ iw ] += abs( A[ ia1 + ia2 ] );
179-
ia2 += strideA2;
210+
for ( j = 0; j < M; j++ ) {
211+
sum = dasum( N, A, strideA2, ia1 );
212+
if ( value < sum || isnan( sum ) ) {
213+
value = sum;
180214
}
181215
ia1 += strideA1;
182-
iw += strideWork;
183216
}
184217
} else {
218+
iw = offsetWork;
219+
for ( i = 0; i < M; i++ ) {
220+
work[ iw ] = 0.0;
221+
iw += strideWork;
222+
}
223+
185224
ia1 = offsetA;
186225
for ( j = 0; j < N; j++ ) {
187226
ia2 = 0;
@@ -193,19 +232,18 @@ function infinityNorm( M, N, A, strideA1, strideA2, offsetA, work, strideWork, o
193232
}
194233
ia1 += strideA2;
195234
}
196-
}
197235

198-
value = 0.0;
236+
value = 0.0;
199237

200-
iw = offsetWork;
201-
for ( i = 0; i < M; i++ ) {
202-
temp = work[ iw ];
203-
if ( value < temp || isnan( temp ) ) {
204-
value = temp;
238+
iw = offsetWork;
239+
for ( i = 0; i < M; i++ ) {
240+
temp = work[ iw ];
241+
if ( value < temp || isnan( temp ) ) {
242+
value = temp;
243+
}
244+
iw += strideWork;
205245
}
206-
iw += strideWork;
207246
}
208-
209247
return value;
210248
}
211249

@@ -289,7 +327,7 @@ function dlange( norm, M, N, A, strideA1, strideA2, offsetA, work, strideWork, o
289327
}
290328

291329
if ( norm === 'one' ) {
292-
return oneNorm( M, N, A, strideA1, strideA2, offsetA );
330+
return oneNorm( M, N, A, strideA1, strideA2, offsetA, work, strideWork, offsetWork ); // eslint-disable-line max-len
293331
}
294332

295333
if ( norm === 'infinity' ) {

lib/node_modules/@stdlib/lapack/base/dlange/test/fixtures/large_strides/one_norm_column_major.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
0.0,
4545
9999.0,
4646
0.0,
47-
9999.0
47+
9999.0,
48+
0.0
4849
],
4950
"strideWork": 2,
5051
"offsetWork": 0,

lib/node_modules/@stdlib/lapack/base/dlange/test/fixtures/large_strides/one_norm_row_major.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
0.0,
4545
9999.0,
4646
0.0,
47-
9999.0
47+
9999.0,
48+
0.0
4849
],
4950
"strideWork": 2,
5051
"offsetWork": 0,

lib/node_modules/@stdlib/lapack/base/dlange/test/fixtures/mixed_strides/one_norm_column_major.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
[ 3.0, 6.0, 9.0, 12.0 ]
2828
],
2929
"work": [
30+
0.0,
3031
0.0,
3132
0.0,
3233
0.0

lib/node_modules/@stdlib/lapack/base/dlange/test/fixtures/mixed_strides/one_norm_row_major.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
[ 3.0, 6.0, 9.0, 12.0 ]
2828
],
2929
"work": [
30+
0.0,
3031
0.0,
3132
0.0,
3233
0.0

lib/node_modules/@stdlib/lapack/base/dlange/test/fixtures/negative_strides/one_norm_column_major.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,12 @@
2727
[ 3.0, 6.0, 9.0, 12.0 ]
2828
],
2929
"work": [
30+
0.0,
3031
0.0,
3132
0.0,
3233
0.0
3334
],
3435
"strideWork": -1,
35-
"offsetWork": 2,
36+
"offsetWork": 3,
3637
"expected": 33
3738
}

lib/node_modules/@stdlib/lapack/base/dlange/test/fixtures/negative_strides/one_norm_row_major.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,12 @@
2727
[ 3.0, 6.0, 9.0, 12.0 ]
2828
],
2929
"work": [
30+
0.0,
3031
0.0,
3132
0.0,
3233
0.0
3334
],
3435
"strideWork": -1,
35-
"offsetWork": 2,
36+
"offsetWork": 3,
3637
"expected": 33
3738
}

lib/node_modules/@stdlib/lapack/base/dlange/test/fixtures/offsets/one_norm_column_major.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
9999.0,
3232
0.0,
3333
0.0,
34+
0.0,
3435
0.0
3536
],
3637
"strideWork": 1,

lib/node_modules/@stdlib/lapack/base/dlange/test/fixtures/offsets/one_norm_row_major.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
9999.0,
3232
0.0,
3333
0.0,
34+
0.0,
3435
0.0
3536
],
3637
"strideWork": 1,

lib/node_modules/@stdlib/lapack/base/dlange/test/fixtures/one_norm_column_major.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
[ 2.0, 5.0, 8.0, 11.0 ],
1414
[ 3.0, 6.0, 9.0, 12.0 ]
1515
],
16-
"work": [ 0.0, 0.0, 0.0 ],
16+
"work": [ 0.0, 0.0, 0.0, 0.0 ],
1717
"strideWork": 1,
1818
"offsetWork": 0,
1919
"expected": 33.0

0 commit comments

Comments
 (0)