Skip to content

Commit 8976032

Browse files
committed
fix: update implementation to preserve signed zeros
--- 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: passed - 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 db705bb commit 8976032

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

lib/node_modules/@stdlib/blas/ext/base/dnansumors/lib/ndarray.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,34 @@ var isnan = require( '@stdlib/math/base/assert/is-nan' );
4545
function dnansumors( N, x, strideX, offsetX ) {
4646
var sum;
4747
var ix;
48+
var v;
4849
var i;
4950

50-
sum = 0.0;
5151
if ( N <= 0 ) {
52-
return sum;
52+
return 0.0;
5353
}
5454
ix = offsetX;
5555
if ( strideX === 0 ) {
5656
if ( isnan( x[ ix ] ) ) {
57-
return sum;
57+
return 0.0;
5858
}
5959
return x[ ix ] * N;
6060
}
61+
// Find the first non-NaN element...
6162
for ( i = 0; i < N; i++ ) {
63+
v = x[ ix ];
64+
if ( isnan( v ) === false ) {
65+
break;
66+
}
67+
ix += strideX;
68+
}
69+
if ( i === N ) {
70+
return 0.0;
71+
}
72+
sum = v;
73+
ix += strideX;
74+
i += 1;
75+
for ( ; i < N; i++ ) {
6276
if ( isnan( x[ ix ] ) === false ) {
6377
sum += x[ ix ];
6478
}

lib/node_modules/@stdlib/blas/ext/base/dnansumors/src/main.c

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,22 +44,36 @@ double API_SUFFIX(stdlib_strided_dnansumors)( const CBLAS_INT N, const double *X
4444
* @return output value
4545
*/
4646
double API_SUFFIX(stdlib_strided_dnansumors_ndarray)( const CBLAS_INT N, const double *X, const CBLAS_INT strideX, const CBLAS_INT offsetX ) {
47-
double sum;
4847
CBLAS_INT ix;
4948
CBLAS_INT i;
49+
double sum;
50+
double v;
5051

51-
sum = 0.0;
5252
if ( N <= 0 ) {
53-
return sum;
53+
return 0.0;
5454
}
5555
ix = offsetX;
5656
if ( strideX == 0 ) {
5757
if ( stdlib_base_is_nan( X[ ix ] ) ) {
58-
return sum;
58+
return 0.0;
5959
}
6060
return X[ ix ] * N;
6161
}
62+
// Find the first non-NaN element...
6263
for ( i = 0; i < N; i++ ) {
64+
v = X[ ix ];
65+
if ( !stdlib_base_is_nan( v ) ) {
66+
break;
67+
}
68+
ix += strideX;
69+
}
70+
if ( i == N ) {
71+
return 0.0;
72+
}
73+
sum = v;
74+
ix += strideX;
75+
i += 1;
76+
for ( ; i < N; i++ ) {
6377
if ( !stdlib_base_is_nan( X[ ix ] ) ) {
6478
sum += X[ ix ];
6579
}

0 commit comments

Comments
 (0)