From 503fe59bb94be3bc191a943b26b1a016e120be71 Mon Sep 17 00:00:00 2001 From: Karan Anand Date: Tue, 25 Mar 2025 02:10:12 -0700 Subject: [PATCH] chore: replace fmax with stdlib equivalent --- 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: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - 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 --- --- .../@stdlib/math/base/special/cinv/manifest.json | 3 +++ .../@stdlib/math/base/special/cinv/src/main.c | 5 ++--- .../@stdlib/math/base/special/cinv/test/test.native.js | 8 ++++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/cinv/manifest.json b/lib/node_modules/@stdlib/math/base/special/cinv/manifest.json index ead3473a9678..e328ac9b4e1c 100644 --- a/lib/node_modules/@stdlib/math/base/special/cinv/manifest.json +++ b/lib/node_modules/@stdlib/math/base/special/cinv/manifest.json @@ -40,6 +40,7 @@ "@stdlib/complex/float64/ctor", "@stdlib/complex/float64/reim", "@stdlib/math/base/special/abs", + "@stdlib/math/base/special/max", "@stdlib/constants/float64/max", "@stdlib/constants/float64/eps", "@stdlib/constants/float64/smallest-normal" @@ -59,6 +60,7 @@ "@stdlib/complex/float64/ctor", "@stdlib/complex/float64/reim", "@stdlib/math/base/special/abs", + "@stdlib/math/base/special/max", "@stdlib/constants/float64/max", "@stdlib/constants/float64/eps", "@stdlib/constants/float64/smallest-normal" @@ -78,6 +80,7 @@ "@stdlib/complex/float64/ctor", "@stdlib/complex/float64/reim", "@stdlib/math/base/special/abs", + "@stdlib/math/base/special/max", "@stdlib/constants/float64/max", "@stdlib/constants/float64/eps", "@stdlib/constants/float64/smallest-normal" diff --git a/lib/node_modules/@stdlib/math/base/special/cinv/src/main.c b/lib/node_modules/@stdlib/math/base/special/cinv/src/main.c index f6ede8d3cf88..88def6b26381 100644 --- a/lib/node_modules/@stdlib/math/base/special/cinv/src/main.c +++ b/lib/node_modules/@stdlib/math/base/special/cinv/src/main.c @@ -18,12 +18,12 @@ #include "stdlib/math/base/special/cinv.h" #include "stdlib/math/base/special/abs.h" +#include "stdlib/math/base/special/max.h" #include "stdlib/constants/float64/max.h" #include "stdlib/constants/float64/eps.h" #include "stdlib/constants/float64/smallest_normal.h" #include "stdlib/complex/float64/ctor.h" #include "stdlib/complex/float64/reim.h" -#include // VARIABLES // @@ -70,8 +70,7 @@ stdlib_complex128_t stdlib_base_cinv( const stdlib_complex128_t z ) { stdlib_complex128_reim( z, &re, &im ); - // TODO: replace `fmax` with stdlib max implementation once available - ab = fmax( stdlib_base_abs( re ), stdlib_base_abs( im ) ); + ab = stdlib_base_max( stdlib_base_abs( re ), stdlib_base_abs( im ) ); s = 1.0; if ( ab >= LARGE_THRESHOLD ) { re *= 0.5; diff --git a/lib/node_modules/@stdlib/math/base/special/cinv/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/cinv/test/test.native.js index eaaf108d5887..ee9244b33b05 100644 --- a/lib/node_modules/@stdlib/math/base/special/cinv/test/test.native.js +++ b/lib/node_modules/@stdlib/math/base/special/cinv/test/test.native.js @@ -95,14 +95,18 @@ tape( 'the function computes a complex inverse', opts, function test( t ) { t.strictEqual( real( q ), qre[ i ], 'returns expected real component' ); } else { delta = abs( real( q ) - qre[ i ] ); - tol = EPS * abs( qre[ i ] ); + + // NOTE: the tolerance here is larger than for the JavaScript implementation due to compiler optimizations which may be performed resulting in result divergence. For discussion, see https://github.com/stdlib-js/stdlib/pull/2298#discussion_r1624765205 + tol = 1.8 * EPS * abs( qre[ i ] ); t.ok( delta <= tol, 'within tolerance. x: '+re[i]+'+ '+im[i]+'i. real: '+real( q )+'. expected: '+qre[i]+'. delta: '+delta+'. tol: '+tol+'.' ); } if ( imag( q ) === qim[ i ] ) { t.strictEqual( imag( q ), qim[ i ], 'returns expected imaginary component' ); } else { delta = abs( imag( q ) - qim[ i ] ); - tol = EPS * abs( qim[ i ] ); + + // NOTE: the tolerance here is larger than for the JavaScript implementation due to compiler optimizations which may be performed resulting in result divergence. For discussion, see https://github.com/stdlib-js/stdlib/pull/2298#discussion_r1624765205 + tol = 1.7 * EPS * abs( qim[ i ] ); t.ok( delta <= tol, 'within tolerance. x: '+re[i]+'+ '+im[i]+'i. imag: '+imag( q )+'. expected: '+qim[i]+'. delta: '+delta+'. tol: '+tol+'.' ); } }