From 26172113b0773e2e3871f963137063ef2eadd205 Mon Sep 17 00:00:00 2001 From: Karan Anand Date: Sun, 6 Apr 2025 21:51:40 -0700 Subject: [PATCH] fix: update to follow the IEEE 754-2019 standard --- 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: 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 --- --- .../math/base/special/sind/lib/main.js | 2 +- .../@stdlib/math/base/special/sind/src/main.c | 2 +- .../math/base/special/sind/test/test.js | 33 +++++++++++++++---- .../base/special/sind/test/test.native.js | 33 +++++++++++++++---- 4 files changed, 56 insertions(+), 14 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/sind/lib/main.js b/lib/node_modules/@stdlib/math/base/special/sind/lib/main.js index e1d424327135..07912811aac5 100644 --- a/lib/node_modules/@stdlib/math/base/special/sind/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/sind/lib/main.js @@ -69,7 +69,7 @@ function sind( x ) { arx = abs( rx ); if ( rx === 0.0 ) { - return 0.0; + return rx; } if ( arx < 45.0 ) { return kernelSin( deg2rad( rx ), 0.0 ); diff --git a/lib/node_modules/@stdlib/math/base/special/sind/src/main.c b/lib/node_modules/@stdlib/math/base/special/sind/src/main.c index ddbf0b69a657..d7be9229ac5a 100644 --- a/lib/node_modules/@stdlib/math/base/special/sind/src/main.c +++ b/lib/node_modules/@stdlib/math/base/special/sind/src/main.c @@ -48,7 +48,7 @@ double stdlib_base_sind( const double x ) { arx = stdlib_base_abs( rx ); if ( rx == 0.0 ) { - return 0.0; + return rx; } if ( arx < 45.0 ) { return stdlib_base_kernel_sin( stdlib_base_deg2rad( rx ), 0.0 ); diff --git a/lib/node_modules/@stdlib/math/base/special/sind/test/test.js b/lib/node_modules/@stdlib/math/base/special/sind/test/test.js index c4eec85bbcb0..1a5a4bb271be 100644 --- a/lib/node_modules/@stdlib/math/base/special/sind/test/test.js +++ b/lib/node_modules/@stdlib/math/base/special/sind/test/test.js @@ -26,6 +26,8 @@ var abs = require( '@stdlib/math/base/special/abs' ); var EPS = require( '@stdlib/constants/float64/eps' ); var PINF = require( '@stdlib/constants/float64/pinf' ); var NINF = require( '@stdlib/constants/float64/ninf' ); +var isNegativeZero = require( '@stdlib/assert/is-negative-zero' ); +var isPositiveZero = require( '@stdlib/assert/is-positive-zero' ); var sind = require( './../lib' ); @@ -109,15 +111,34 @@ tape( 'if provided `-infinity`, the function returns `NaN`', function test( t ) t.end(); }); -tape( 'if provided a multiple of `180.0`, the function returns `0.0`', function test( t ) { +tape( 'if provided a positive multiple of `180.0`, the function returns `0.0`', function test( t ) { var v = sind( 180.0 ); - t.equal( v, 0.0, 'returns expected value' ); - - v = sind( -180.0 ); - t.equal( v, 0.0, 'returns expected value' ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); v = sind( 360.0 ); - t.equal( v, 0.0, 'returns expected value' ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided a negative multiple of `180.0`, the function returns `-0.0`', function test( t ) { + var v = sind( -180.0 ); + t.strictEqual( isNegativeZero( v ), true, 'returns expected value' ); + + v = sind( -360.0 ); + t.strictEqual( isNegativeZero( v ), true, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function returns `-0` if provided `-0`', function test( t ) { + var v = sind( -0.0 ); + t.strictEqual( isNegativeZero( v ), true, 'returns expected value' ); + t.end(); +}); +tape( 'the function returns `+0` if provided `+0`', function test( t ) { + var v = sind( 0.0 ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); t.end(); }); diff --git a/lib/node_modules/@stdlib/math/base/special/sind/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/sind/test/test.native.js index 84580ec571de..dbaf0f114c68 100644 --- a/lib/node_modules/@stdlib/math/base/special/sind/test/test.native.js +++ b/lib/node_modules/@stdlib/math/base/special/sind/test/test.native.js @@ -27,6 +27,8 @@ var abs = require( '@stdlib/math/base/special/abs' ); var EPS = require( '@stdlib/constants/float64/eps' ); var PINF = require( '@stdlib/constants/float64/pinf' ); var NINF = require( '@stdlib/constants/float64/ninf' ); +var isNegativeZero = require( '@stdlib/assert/is-negative-zero' ); +var isPositiveZero = require( '@stdlib/assert/is-positive-zero' ); var tryRequire = require( '@stdlib/utils/try-require' ); @@ -118,15 +120,34 @@ tape( 'if provided `-infinity`, the function returns `NaN`', opts, function test t.end(); }); -tape( 'if provided a multiple of `180.0`, the function returns `0.0`', opts, function test( t ) { +tape( 'if provided a positive multiple of `180.0`, the function returns `0.0`', opts, function test( t ) { var v = sind( 180.0 ); - t.equal( v, 0.0, 'returns expected value' ); - - v = sind( -180.0 ); - t.equal( v, 0.0, 'returns expected value' ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); v = sind( 360.0 ); - t.equal( v, 0.0, 'returns expected value' ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided a negative multiple of `180.0`, the function returns `0.0`', opts, function test( t ) { + var v = sind( -180.0 ); + t.strictEqual( isNegativeZero( v ), true, 'returns expected value' ); + + v = sind( -360.0 ); + t.strictEqual( isNegativeZero( v ), true, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function returns `-0` if provided `-0`', opts, function test( t ) { + var v = sind( -0.0 ); + t.strictEqual( isNegativeZero( v ), true, 'returns expected value' ); + t.end(); +}); +tape( 'the function returns `+0` if provided `+0`', opts, function test( t ) { + var v = sind( 0.0 ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); t.end(); });