Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
7d1ee57
feat: add math/base/special/sincosdf
ByteKnight28 Jan 18, 2026
f029c63
Update lib/node_modules/@stdlib/math/base/special/sincosdf/lib/assign.js
ByteKnight28 Jan 19, 2026
5198e07
Update lib/node_modules/@stdlib/math/base/special/sincosdf/lib/index.js
ByteKnight28 Jan 19, 2026
388a8f6
Update lib/node_modules/@stdlib/math/base/special/sincosdf/lib/native.js
ByteKnight28 Jan 19, 2026
46fb987
Update lib/node_modules/@stdlib/math/base/special/sincosdf/lib/main.js
ByteKnight28 Jan 19, 2026
3c41993
Merge branch 'stdlib-js:develop' into math/base/special/sincosdf
ByteKnight28 Jan 19, 2026
ab89048
chore: update according to code review
ByteKnight28 Jan 19, 2026
3ac1aaa
chore: update according to code review
ByteKnight28 Jan 19, 2026
b5fe8c8
chore: update according to code review
ByteKnight28 Jan 19, 2026
e868930
chore: update according to code review
ByteKnight28 Jan 19, 2026
5b2ffeb
Merge branch 'stdlib-js:develop' into math/base/special/sincosdf
ByteKnight28 Jan 19, 2026
90e0097
Merge branch 'stdlib-js:develop' into math/base/special/sincosdf
ByteKnight28 Jan 20, 2026
5e02b08
chore: update copyright years and fix lint/benchmark issues
ByteKnight28 Jan 23, 2026
7143b2e
chore: address code review feedback
ByteKnight28 Jan 24, 2026
d9dc4a5
chore: update the test files
ByteKnight28 Feb 10, 2026
97d5182
Update lib/node_modules/@stdlib/math/base/special/sincosdf/examples/i…
ByteKnight28 Feb 10, 2026
659d51b
chore: address the code review
ByteKnight28 Feb 10, 2026
5beb1b8
bench: replace isnan with isnanf in benchmark tests
Planeshifter Feb 11, 2026
514808f
bench: replace isnan with isnanf in benchmark tests
Planeshifter Feb 11, 2026
d259a63
docs: update descriptions
Planeshifter Feb 11, 2026
ceb3bad
docs: update descriptions
Planeshifter Feb 11, 2026
f04ecf3
docs: remove trailing space
Planeshifter Feb 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
204 changes: 204 additions & 0 deletions lib/node_modules/@stdlib/math/base/special/sincosdf/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
<!--

@license Apache-2.0

Copyright (c) 2026 The Stdlib Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

-->

# sincosdf

> Simultaneously compute the [sine][@stdlib/math/base/special/sindf] and [cosine][@stdlib/math/base/special/cosdf] of a single-precision floating-point number (in degrees).

<section class="usage">

## Usage

```javascript
var sincosdf = require( '@stdlib/math/base/special/sincosdf' );
```

#### sincosdf( x )

Simultaneously computes the [sine][@stdlib/math/base/special/sindf] and [cosine][@stdlib/math/base/special/cosdf] of a single-precision floating-point number (in degrees).

```javascript
var v = sincosdf( 0.0 );
// returns [ ~0.0, ~1.0 ]

v = sincosdf( 90.0 );
// returns [ ~1.0, ~0.0 ]

v = sincosdf( -30.0 );
// returns [ ~-0.5, ~0.866 ]
```

#### sincosdf.assign( x, out, stride, offset )

Simultaneously computes the [sine][@stdlib/math/base/special/sindf] and [cosine][@stdlib/math/base/special/cosdf] of a single-precision floating-point number (in degrees) and assigns the results to a provided output array.

```javascript
var Float32Array = require( '@stdlib/array/float32' );

var out = new Float32Array( 2 );

var v = sincosdf.assign( 0.0, out, 1, 0 );
// returns <Float32Array>[ ~0.0, ~1.0 ]

var bool = ( v === out );
// returns true
```

</section>

<!-- /.usage -->

<section class="examples">

## Examples

<!-- eslint no-undef: "error" -->

```javascript
var linspace = require( '@stdlib/array/base/linspace' );
var sincosdf = require( '@stdlib/math/base/special/sincosdf' );

var x = linspace( 0.0, 180.0, 100 );

var y;
var i;
for ( i = 0; i < x.length; i++ ) {
y = sincosdf( x[ i ] );
console.log( 'sincosdf(%d) = [ %d, %d ]', x[ i ], y[ 0 ], y[ 1 ] );
}
```

</section>

<!-- /.examples -->

<!-- C interface documentation. -->

* * *

<section class="c">

## C APIs

<!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. -->

<section class="intro">

</section>

<!-- /.intro -->

<!-- C usage documentation. -->

<section class="usage">

### Usage

```c
#include "stdlib/math/base/special/sincosdf.h"
```

#### stdlib_base_sincosdf( x, &sine, &cosine )

Simultaneously computes the [sine][@stdlib/math/base/special/sindf] and [cosine][@stdlib/math/base/special/cosdf] of a single-precision floating-point number (in degrees).

```c
float cosine;
float sine;

stdlib_base_sincosdf( 4.0f, &sine, &cosine );
```

The function accepts the following arguments:

- **x**: `[in] float` input value.
- **sine**: `[out] float*` destination for the sine.
- **cosine**: `[out] float*` destination for the cosine.

```c
void stdlib_base_sincosdf( const float x, float *sine, float *cosine );
```

</section>

<!-- /.usage -->

<!-- C API usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->

<section class="notes">

</section>

<!-- /.notes -->

<!-- C API usage examples. -->

<section class="examples">

### Examples

```c
#include "stdlib/math/base/special/sincosdf.h"
#include <stdio.h>

int main( void ) {
const float x[] = { 0.0f, 90.0f, 180.0f, 360.0f };

float cosine;
float sine;
int i;
for ( i = 0; i < 4; i++ ) {
stdlib_base_sincosdf( x[ i ], &sine, &cosine );
printf( "x: %f => sine: %f, cosine: %f\n", x[ i ], sine, cosine );
}
}
```

</section>

<!-- /.examples -->

</section>

<!-- /.c -->

<!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. -->

<section class="related">

</section>

<!-- /.related -->

<!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->

<section class="links">

[@stdlib/math/base/special/cosdf]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/math/base/special/cosdf

[@stdlib/math/base/special/sindf]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/math/base/special/sindf

<!-- <related-links> -->

<!-- </related-links> -->

</section>

<!-- /.links -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2026 The Stdlib Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

'use strict';

// MODULES //

var bench = require( '@stdlib/bench' );
var format = require( '@stdlib/string/format' );
var uniform = require( '@stdlib/random/array/uniform' );
var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
var sindf = require( '@stdlib/math/base/special/sindf' );
var cosdf = require( '@stdlib/math/base/special/cosdf' );
var pkg = require( './../package.json' ).name;
var sincosdf = require( './../lib' );


// MAIN //

bench( pkg, function benchmark( b ) {
var x;
var y;
var i;

x = uniform( 100, -10.0, 10.0, {
'dtype': 'float32'
});

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
y = sincosdf( x[ i % x.length ] );
if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) {
b.fail( 'should not return NaN' );
}
}
b.toc();
if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) {
b.fail( 'should not return NaN' );
}
b.pass( 'benchmark finished' );
b.end();
});

bench( format( '%s::separate-evaluation', pkg ), function benchmark( b ) {
var x;
var y;
var i;

x = uniform( 100, -10.0, 10.0, {
'dtype': 'float32'
});
y = [ 0.0, 0.0 ];

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
y = [ sindf( x[ i % x.length ] ), cosdf( x[ i % x.length ] ) ];
if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) {
b.fail( 'should not return NaN' );
}
}
b.toc();
if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) {
b.fail( 'should not return NaN' );
}
b.pass( 'benchmark finished' );
b.end();
} );

bench( format( '%s:assign', pkg ), function benchmark( b ) {
var x;
var y;
var i;

x = uniform( 100, -10.0, 10.0, {
'dtype': 'float32'
});
y = [ 0.0, 0.0 ];

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
sincosdf.assign( x[ i % x.length ], y, 1, 0 );
if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) {
b.fail( 'should not return NaN' );
}
}
b.toc();
if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) {
b.fail( 'should not return NaN' );
}
b.pass( 'benchmark finished' );
b.end();
} );

bench( format( '%s::separate-evaluation,in-place', pkg ), function benchmark( b ) {
var x;
var y;
var i;

x = uniform( 100, -10.0, 10.0, {
'dtype': 'float32'
});
y = [ 0.0, 0.0 ];

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
y[ 0 ] = sindf( x[ i % x.length ] );
y[ 1 ] = cosdf( x[ i % x.length ] );
if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) {
b.fail( 'should not return NaN' );
}
}
b.toc();
if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) {
b.fail( 'should not return NaN' );
}
b.pass( 'benchmark finished' );
b.end();
} );
Loading