Skip to content

Commit

Permalink
Auto-generated commit
Browse files Browse the repository at this point in the history
  • Loading branch information
stdlib-bot committed Jul 14, 2023
1 parent e053d86 commit 44ebf88
Show file tree
Hide file tree
Showing 26 changed files with 1,525 additions and 130 deletions.
128 changes: 114 additions & 14 deletions base/special/cphase/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ limitations under the License.

# cphase

> Compute the [argument][complex-number-argument] of a complex number in radians.
> Compute the [argument][complex-number-argument] of a double-precision complex floating-point number in radians.
<section class="intro">

Expand All @@ -38,12 +38,14 @@ The [argument][complex-number-argument] of a complex number, also known as the *
var cphase = require( '@stdlib/math/base/special/cphase' );
```

#### cphase( re, im )
#### cphase( z )

Computes the [argument][complex-number-argument] of a `complex` number comprised of a **real** component `re` and an **imaginary** component `im`.
Computes the [argument][complex-number-argument] of a double-precision complex floating-point number.

```javascript
var phi = cphase( 5.0, 3.0 );
var Complex128 = require( '@stdlib/complex/float64' );

var phi = cphase( new Complex128( 5.0, 3.0 ) );
// returns ~0.5404
```

Expand All @@ -59,29 +61,127 @@ var phi = cphase( 5.0, 3.0 );

```javascript
var Complex128 = require( '@stdlib/complex/float64' );
var randu = require( '@stdlib/random/base/randu' );
var round = require( '@stdlib/math/base/special/round' );
var real = require( '@stdlib/complex/real' );
var imag = require( '@stdlib/complex/imag' );
var uniform = require( '@stdlib/random/base/uniform' );
var cphase = require( '@stdlib/math/base/special/cphase' );

var re;
var im;
var z;
var i;

for ( i = 0; i < 100; i++ ) {
re = round( randu()*100.0 ) - 50.0;
im = round( randu()*100.0 ) - 50.0;
z = new Complex128( re, im );
console.log( 'arg(%s) = %d', z.toString(), cphase( real(z), imag(z) ) );
z = new Complex128( uniform( -500.0, 500.0 ), uniform( -500.0, 500.0 ) );
console.log( 'arg(%s) = %d', z.toString(), cphase( z ) );
}
```

</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/cphase.h"
```

#### stdlib_base_cphase( z )

Computes the [argument][complex-number-argument] of a double-precision complex floating-point number.

```c
#include "stdlib/complex/float64.h"
#include "stdlib/complex/real.h"
#include "stdlib/complex/imag.h"

stdlib_complex128_t z = stdlib_complex128( 5.0, 3.0 );
double out = stdlib_base_cphase( z );
// returns ~0.5404
```

The function accepts the following arguments:

- **z**: `[in] stdlib_complex128_t` input value.

```c
double stdlib_base_cphase( const stdlib_complex128_t z );
```
</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/cphase.h"
#include "stdlib/complex/float64.h"
#include "stdlib/complex/reim.h"
#include <stdio.h>
int main( void ) {
const stdlib_complex128_t x[] = {
stdlib_complex128( 3.14, 1.5 ),
stdlib_complex128( -3.14, -1.5 ),
stdlib_complex128( 0.0, 0.0 ),
stdlib_complex128( 0.0/0.0, 0.0/0.0 )
};
stdlib_complex128_t v;
stdlib_complex128_t y;
double re1;
double im1;
double re2;
double im2;
int i;
for ( i = 0; i < 4; i++ ) {
v = x[ i ];
y = stdlib_base_cphase( v );
stdlib_reim( v, &re1, &im1 );
stdlib_reim( y, &re2, &im2 );
printf( "cphase(%lf + %lfi) = %lf\n", re, im, y );
}
}
```

</section>

<!-- /.examples -->

</section>

<!-- /.c -->

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

<section class="related">
Expand Down
15 changes: 9 additions & 6 deletions base/special/cphase/benchmark/benchmark.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
// MODULES //

var bench = require( '@stdlib/bench' );
var randu = require( '@stdlib/random/base/randu' );
var uniform = require( '@stdlib/random/base/uniform' );
var Complex128 = require( '@stdlib/complex/float64' );
var isnan = require( './../../../../base/assert/is-nan' );
var pkg = require( './../package.json' ).name;
var cphase = require( './../lib' );
Expand All @@ -30,16 +31,18 @@ var cphase = require( './../lib' );
// MAIN //

bench( pkg, function benchmark( b ) {
var re;
var im;
var values;
var y;
var i;

values = [
new Complex128( uniform( -500.0, 500.0 ), uniform( -500.0, 500.0 ) ),
new Complex128( uniform( -500.0, 500.0 ), uniform( -500.0, 500.0 ) )
];

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
re = ( randu()*1000.0 ) - 500.0;
im = ( randu()*1000.0 ) - 500.0;
y = cphase( re, im );
y = cphase( values[ i%values.length ] );
if ( isnan( y ) ) {
b.fail( 'should not return NaN' );
}
Expand Down
65 changes: 65 additions & 0 deletions base/special/cphase/benchmark/benchmark.native.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2023 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 resolve = require( 'path' ).resolve;
var bench = require( '@stdlib/bench' );
var uniform = require( '@stdlib/random/base/uniform' );
var isnan = require( './../../../../base/assert/is-nan' );
var Complex128 = require( '@stdlib/complex/float64' );
var tryRequire = require( '@stdlib/utils/try-require' );
var pkg = require( './../package.json' ).name;


// VARIABLES //

var cphase = tryRequire( resolve( __dirname, './../lib/native.js' ) );
var opts = {
'skip': ( cphase instanceof Error )
};


// MAIN //

bench( pkg+'::native', opts, function benchmark( b ) {
var values;
var y;
var i;

values = [
new Complex128( uniform( -500.0, 500.0 ), uniform( -500.0, 500.0 ) ),
new Complex128( uniform( -500.0, 500.0 ), uniform( -500.0, 500.0 ) )
];

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
y = cphase( values[ i%values.length ] );
if ( isnan( y ) ) {
b.fail( 'should not return NaN' );
}
}
b.toc();
if ( isnan( y ) ) {
b.fail( 'should not return NaN' );
}
b.pass( 'benchmark finished' );
b.end();
});
Loading

0 comments on commit 44ebf88

Please sign in to comment.