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 79ba1e0594bf..dd4b52a76079 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.strictEqual( v, 0.0, 'returns expected value' ); - - v = sind( -180.0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); v = sind( 360.0 ); - t.strictEqual( 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 ddac461f125c..4b0e9116590f 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.strictEqual( v, 0.0, 'returns expected value' ); - - v = sind( -180.0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); v = sind( 360.0 ); - t.strictEqual( 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(); });