Skip to content

Commit f5459a7

Browse files
fix: update math/base/special/secd to match correct reference implementation
PR-URL: #5810 Reviewed-by: Philipp Burckhardt <[email protected]>
1 parent 3f0943b commit f5459a7

File tree

13 files changed

+77
-57
lines changed

13 files changed

+77
-57
lines changed

lib/node_modules/@stdlib/math/base/special/secd/README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,19 @@ var secd = require( '@stdlib/math/base/special/secd' );
3535
Computes the [secant][secant] of `x` (in degrees).
3636

3737
```javascript
38-
var v = secd( 30 );
38+
var v = secd( 30.0 );
3939
// returns ~1.15
4040

41-
v = secd( 45 );
41+
v = secd( 45.0 );
4242
// returns ~1.41
4343

44-
v = secd( 60 );
44+
v = secd( 60.0 );
4545
// returns ~2.0
4646

47-
v = secd( 90 );
48-
// returns 16331239353195370
47+
v = secd( 90.0 );
48+
// returns Infinity
4949

50-
v = secd( 0 );
50+
v = secd( 0.0 );
5151
// returns 1.0
5252

5353
v = secd( NaN );

lib/node_modules/@stdlib/math/base/special/secd/docs/types/index.d.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,23 @@
2525
* @returns secant
2626
*
2727
* @example
28-
* var v = secd( 30 );
28+
* var v = secd( 30.0 );
2929
* // returns ~1.15
3030
*
3131
* @example
32-
* var v = secd( 45 );
32+
* var v = secd( 45.0 );
3333
* // returns ~1.41
3434
*
3535
* @example
36-
* var v = secd( 60 );
36+
* var v = secd( 60.0 );
3737
* // returns ~2.0
3838
*
3939
* @example
40-
* var v = secd( 90 );
41-
* // returns 16331239353195370.0
40+
* var v = secd( 90.0 );
41+
* // returns Infinity
4242
*
4343
* @example
44-
* var v = secd( 0 );
44+
* var v = secd( 0.0 );
4545
* // returns 1.0
4646
*
4747
* @example

lib/node_modules/@stdlib/math/base/special/secd/docs/types/test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import secd = require( './index' );
2323

2424
// The function returns a number...
2525
{
26-
secd( 60 ); // $ExpectType number
26+
secd( 60.0 ); // $ExpectType number
2727
}
2828

2929
// The compiler throws an error if the function is provided a value other than a number...

lib/node_modules/@stdlib/math/base/special/secd/lib/index.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@
2626
* @example
2727
* var secd = require( '@stdlib/math/base/special/secd' );
2828
*
29-
* var v = secd( 30 );
29+
* var v = secd( 30.0 );
3030
* // returns ~1.15
3131
*
32-
* v = secd( 45 );
32+
* v = secd( 45.0 );
3333
* // returns ~1.41
3434
*
35-
* v = secd( 60 );
35+
* v = secd( 60.0 );
3636
* // returns ~2.0
3737
*
38-
* v = secd( 90 );
39-
* // returns 16331239353195370
38+
* v = secd( 90.0 );
39+
* // returns Infinity
4040
*
41-
* v = secd( 0 );
41+
* v = secd( 0.0 );
4242
* // returns 1.0
4343
*
4444
* v = secd( NaN );

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020

2121
// MODULES //
2222

23-
var cos = require( '@stdlib/math/base/special/cos' );
24-
var deg2rad = require( '@stdlib/math/base/special/deg2rad' );
23+
var cosd = require( '@stdlib/math/base/special/cosd' );
2524

2625

2726
// MAIN //
@@ -33,32 +32,31 @@ var deg2rad = require( '@stdlib/math/base/special/deg2rad' );
3332
* @returns {number} secant
3433
*
3534
* @example
36-
* var v = secd( 30 );
35+
* var v = secd( 30.0 );
3736
* // returns ~1.15
3837
*
3938
* @example
40-
* var v = secd( 45 );
39+
* var v = secd( 45.0 );
4140
* // returns ~1.41
4241
*
4342
* @example
44-
* var v = secd( 60 );
43+
* var v = secd( 60.0 );
4544
* // returns ~2.0
4645
*
4746
* @example
48-
* var v = secd( 90 );
49-
* // returns 16331239353195370.0
47+
* var v = secd( 90.0 );
48+
* // returns Infinity
5049
*
5150
* @example
52-
* var v = secd( 0 );
51+
* var v = secd( 0.0 );
5352
* // returns 1.0
5453
*
5554
* @example
5655
* var v = secd( NaN );
5756
* // returns NaN
5857
*/
5958
function secd( x ) {
60-
var rad = deg2rad( x );
61-
return 1.0 / cos( rad );
59+
return 1.0 / cosd( x );
6260
}
6361

6462

lib/node_modules/@stdlib/math/base/special/secd/lib/native.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,23 @@ var addon = require( './../src/addon.node' );
3333
* @returns {number} secant
3434
*
3535
* @example
36-
* var v = secd( 30 );
36+
* var v = secd( 30.0 );
3737
* // returns ~1.15
3838
*
3939
* @example
40-
* var v = secd( 45 );
40+
* var v = secd( 45.0 );
4141
* // returns ~1.41
4242
*
4343
* @example
44-
* var v = secd( 60 );
44+
* var v = secd( 60.0 );
4545
* // returns ~2.0
4646
*
4747
* @example
48-
* var v = secd( 90 );
49-
* // returns 16331239353195370.0
48+
* var v = secd( 90.0 );
49+
* // returns Infinity
5050
*
5151
* @example
52-
* var v = secd( 0 );
52+
* var v = secd( 0.0 );
5353
* // returns 1.0
5454
*
5555
* @example

lib/node_modules/@stdlib/math/base/special/secd/manifest.json

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@
3737
"libpath": [],
3838
"dependencies": [
3939
"@stdlib/math/base/napi/unary",
40-
"@stdlib/math/base/special/deg2rad",
41-
"@stdlib/math/base/special/cos"
40+
"@stdlib/math/base/special/cosd"
4241
]
4342
},
4443
{
@@ -52,8 +51,7 @@
5251
"libraries": [],
5352
"libpath": [],
5453
"dependencies": [
55-
"@stdlib/math/base/special/deg2rad",
56-
"@stdlib/math/base/special/cos"
54+
"@stdlib/math/base/special/cosd"
5755
]
5856
},
5957
{
@@ -67,8 +65,7 @@
6765
"libraries": [],
6866
"libpath": [],
6967
"dependencies": [
70-
"@stdlib/math/base/special/deg2rad",
71-
"@stdlib/math/base/special/cos"
68+
"@stdlib/math/base/special/cosd"
7269
]
7370
}
7471
]

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
*/
1818

1919
#include "stdlib/math/base/special/secd.h"
20-
#include "stdlib/math/base/special/cos.h"
21-
#include "stdlib/math/base/special/deg2rad.h"
20+
#include "stdlib/math/base/special/cosd.h"
2221

2322
/**
2423
* Computes the secant of an angle measured in degrees.
@@ -31,5 +30,5 @@
3130
* // returns ~1.15
3231
*/
3332
double stdlib_base_secd( const double x ) {
34-
return 1.0 / stdlib_base_cos( stdlib_base_deg2rad( x ) );
33+
return 1.0 / stdlib_base_cosd( x );
3534
}

lib/node_modules/@stdlib/math/base/special/secd/test/fixtures/julia/negative.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

lib/node_modules/@stdlib/math/base/special/secd/test/fixtures/julia/positive.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

lib/node_modules/@stdlib/math/base/special/secd/test/fixtures/julia/runner.jl

100644100755
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import JSON
2020

2121
"""
22-
gen( domain, name )
22+
gen( domain, name )
2323
2424
Generate fixture data and write to file.
2525
@@ -62,9 +62,9 @@ file = @__FILE__;
6262
dir = dirname(file);
6363

6464
# Positive values:
65-
x = range( 1.0, stop=10.0, length=2003 );
66-
gen( x, "positive.json" );
65+
x = range( -360.0, stop = 0.0, length = 1000 );
66+
gen( x, "negative.json" );
6767

6868
# Negative values:
69-
x = range( -1.0, stop=-10.0, length=2003 );
70-
gen( x, "negative.json" );
69+
x = range( 0.0, stop = 360.0, length = 1000 );
70+
gen( x, "positive.json" );

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var tape = require( 'tape' );
2424
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2525
var abs = require( '@stdlib/math/base/special/abs' );
2626
var EPS = require( '@stdlib/constants/float64/eps' );
27+
var PINF = require( '@stdlib/constants/float64/pinf' );
2728
var secd = require( './../lib' );
2829

2930

@@ -58,7 +59,7 @@ tape( 'the function computes the secant of an angle measured in degrees (negativ
5859
t.equal( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
5960
} else {
6061
delta = abs( y - expected[i] );
61-
tol = EPS * abs( expected[i] );
62+
tol = 1.4 * EPS * abs( expected[i] );
6263
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
6364
}
6465
}
@@ -82,7 +83,7 @@ tape( 'the function computes the secant of an angle measured in degrees (positiv
8283
t.equal( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
8384
} else {
8485
delta = abs( y - expected[i] );
85-
tol = EPS * abs( expected[i] );
86+
tol = 1.4 * EPS * abs( expected[i] );
8687
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
8788
}
8889
}
@@ -91,6 +92,18 @@ tape( 'the function computes the secant of an angle measured in degrees (positiv
9192

9293
tape( 'the function returns `NaN` if provided `NaN`', function test( t ) {
9394
var v = secd( NaN );
94-
t.equal( isnan( v ), true, 'returns NaN' );
95+
t.equal( isnan( v ), true, 'returns expected value' );
96+
t.end();
97+
});
98+
99+
tape( 'the function returns `+Infinity` if provided an odd multiple of `90`', function test( t ) {
100+
var v = secd( 90.0 );
101+
t.equal( v, PINF, 'returns expected value' );
102+
v = secd( -90.0 );
103+
t.equal( v, PINF, 'returns expected value' );
104+
v = secd( 270.0 );
105+
t.equal( v, PINF, 'returns expected value' );
106+
v = secd( -270.0 );
107+
t.equal( v, PINF, 'returns expected value' );
95108
t.end();
96109
});

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ var tape = require( 'tape' );
2525
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2626
var abs = require( '@stdlib/math/base/special/abs' );
2727
var EPS = require( '@stdlib/constants/float64/eps' );
28+
var PINF = require( '@stdlib/constants/float64/pinf' );
2829
var tryRequire = require( '@stdlib/utils/try-require' );
2930

3031

@@ -67,7 +68,7 @@ tape( 'the function computes the secant of an angle measured in degrees (negativ
6768
t.equal( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
6869
} else {
6970
delta = abs( y - expected[i] );
70-
tol = EPS * abs( expected[i] );
71+
tol = 1.4 * EPS * abs( expected[i] );
7172
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
7273
}
7374
}
@@ -91,7 +92,7 @@ tape( 'the function computes the secant of an angle measured in degrees (positiv
9192
t.equal( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
9293
} else {
9394
delta = abs( y - expected[i] );
94-
tol = EPS * abs( expected[i] );
95+
tol = 1.4 * EPS * abs( expected[i] );
9596
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
9697
}
9798
}
@@ -100,6 +101,18 @@ tape( 'the function computes the secant of an angle measured in degrees (positiv
100101

101102
tape( 'the function returns `NaN` if provided `NaN`', opts, function test( t ) {
102103
var v = secd( NaN );
103-
t.equal( isnan( v ), true, 'returns NaN' );
104+
t.equal( isnan( v ), true, 'returns expected value' );
105+
t.end();
106+
});
107+
108+
tape( 'the function returns `+Infinity` if provided an odd multiple of `90`', opts, function test( t ) {
109+
var v = secd( 90.0 );
110+
t.equal( v, PINF, 'returns expected value' );
111+
v = secd( -90.0 );
112+
t.equal( v, PINF, 'returns expected value' );
113+
v = secd( 270.0 );
114+
t.equal( v, PINF, 'returns expected value' );
115+
v = secd( -270.0 );
116+
t.equal( v, PINF, 'returns expected value' );
104117
t.end();
105118
});

0 commit comments

Comments
 (0)