Skip to content

Commit 3eeefe6

Browse files
fix: update sind to follow the IEEE 754-2019 standard
PR-URL: #6592 Reviewed-by: Athan Reines <[email protected]> Signed-off-by: Karan Anand <[email protected]>
1 parent c30bb89 commit 3eeefe6

File tree

4 files changed

+56
-14
lines changed

4 files changed

+56
-14
lines changed

lib/node_modules/@stdlib/math/base/special/sind/lib/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ function sind( x ) {
6969
arx = abs( rx );
7070

7171
if ( rx === 0.0 ) {
72-
return 0.0;
72+
return rx;
7373
}
7474
if ( arx < 45.0 ) {
7575
return kernelSin( deg2rad( rx ), 0.0 );

lib/node_modules/@stdlib/math/base/special/sind/src/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ double stdlib_base_sind( const double x ) {
4848
arx = stdlib_base_abs( rx );
4949

5050
if ( rx == 0.0 ) {
51-
return 0.0;
51+
return rx;
5252
}
5353
if ( arx < 45.0 ) {
5454
return stdlib_base_kernel_sin( stdlib_base_deg2rad( rx ), 0.0 );

lib/node_modules/@stdlib/math/base/special/sind/test/test.js

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ var abs = require( '@stdlib/math/base/special/abs' );
2626
var EPS = require( '@stdlib/constants/float64/eps' );
2727
var PINF = require( '@stdlib/constants/float64/pinf' );
2828
var NINF = require( '@stdlib/constants/float64/ninf' );
29+
var isNegativeZero = require( '@stdlib/assert/is-negative-zero' );
30+
var isPositiveZero = require( '@stdlib/assert/is-positive-zero' );
2931
var sind = require( './../lib' );
3032

3133

@@ -109,15 +111,34 @@ tape( 'if provided `-infinity`, the function returns `NaN`', function test( t )
109111
t.end();
110112
});
111113

112-
tape( 'if provided a multiple of `180.0`, the function returns `0.0`', function test( t ) {
114+
tape( 'if provided a positive multiple of `180.0`, the function returns `0.0`', function test( t ) {
113115
var v = sind( 180.0 );
114-
t.strictEqual( v, 0.0, 'returns expected value' );
115-
116-
v = sind( -180.0 );
117-
t.strictEqual( v, 0.0, 'returns expected value' );
116+
t.strictEqual( isPositiveZero( v ), true, 'returns expected value' );
118117

119118
v = sind( 360.0 );
120-
t.strictEqual( v, 0.0, 'returns expected value' );
119+
t.strictEqual( isPositiveZero( v ), true, 'returns expected value' );
120+
121+
t.end();
122+
});
123+
124+
tape( 'if provided a negative multiple of `180.0`, the function returns `-0.0`', function test( t ) {
125+
var v = sind( -180.0 );
126+
t.strictEqual( isNegativeZero( v ), true, 'returns expected value' );
127+
128+
v = sind( -360.0 );
129+
t.strictEqual( isNegativeZero( v ), true, 'returns expected value' );
130+
131+
t.end();
132+
});
133+
134+
tape( 'the function returns `-0` if provided `-0`', function test( t ) {
135+
var v = sind( -0.0 );
136+
t.strictEqual( isNegativeZero( v ), true, 'returns expected value' );
137+
t.end();
138+
});
121139

140+
tape( 'the function returns `+0` if provided `+0`', function test( t ) {
141+
var v = sind( 0.0 );
142+
t.strictEqual( isPositiveZero( v ), true, 'returns expected value' );
122143
t.end();
123144
});

lib/node_modules/@stdlib/math/base/special/sind/test/test.native.js

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ var abs = require( '@stdlib/math/base/special/abs' );
2727
var EPS = require( '@stdlib/constants/float64/eps' );
2828
var PINF = require( '@stdlib/constants/float64/pinf' );
2929
var NINF = require( '@stdlib/constants/float64/ninf' );
30+
var isNegativeZero = require( '@stdlib/assert/is-negative-zero' );
31+
var isPositiveZero = require( '@stdlib/assert/is-positive-zero' );
3032
var tryRequire = require( '@stdlib/utils/try-require' );
3133

3234

@@ -118,15 +120,34 @@ tape( 'if provided `-infinity`, the function returns `NaN`', opts, function test
118120
t.end();
119121
});
120122

121-
tape( 'if provided a multiple of `180.0`, the function returns `0.0`', opts, function test( t ) {
123+
tape( 'if provided a positive multiple of `180.0`, the function returns `0.0`', opts, function test( t ) {
122124
var v = sind( 180.0 );
123-
t.strictEqual( v, 0.0, 'returns expected value' );
124-
125-
v = sind( -180.0 );
126-
t.strictEqual( v, 0.0, 'returns expected value' );
125+
t.strictEqual( isPositiveZero( v ), true, 'returns expected value' );
127126

128127
v = sind( 360.0 );
129-
t.strictEqual( v, 0.0, 'returns expected value' );
128+
t.strictEqual( isPositiveZero( v ), true, 'returns expected value' );
129+
130+
t.end();
131+
});
132+
133+
tape( 'if provided a negative multiple of `180.0`, the function returns `0.0`', opts, function test( t ) {
134+
var v = sind( -180.0 );
135+
t.strictEqual( isNegativeZero( v ), true, 'returns expected value' );
136+
137+
v = sind( -360.0 );
138+
t.strictEqual( isNegativeZero( v ), true, 'returns expected value' );
139+
140+
t.end();
141+
});
142+
143+
tape( 'the function returns `-0` if provided `-0`', opts, function test( t ) {
144+
var v = sind( -0.0 );
145+
t.strictEqual( isNegativeZero( v ), true, 'returns expected value' );
146+
t.end();
147+
});
130148

149+
tape( 'the function returns `+0` if provided `+0`', opts, function test( t ) {
150+
var v = sind( 0.0 );
151+
t.strictEqual( isPositiveZero( v ), true, 'returns expected value' );
131152
t.end();
132153
});

0 commit comments

Comments
 (0)