Merged
Show file tree
Hide file tree
Changes from 1 commit
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Failed to load files.
Next Next commit
feat: add C implementation for @stdlib/stats/base/dists/rayleigh/quan…
…tile

---
type: pre_commit_static_analysis_report
description: Results of running static analysis checks when committing changes.
report:
  - task: lint_filenames
    status: passed
  - task: lint_editorconfig
    status: passed
  - task: lint_markdown
    status: passed
  - task: lint_package_json
    status: passed
  - task: lint_repl_help
    status: na
  - task: lint_javascript_src
    status: passed
  - task: lint_javascript_cli
    status: na
  - task: lint_javascript_examples
    status: na
  - task: lint_javascript_tests
    status: passed
  - task: lint_javascript_benchmarks
    status: passed
  - task: lint_python
    status: na
  - task: lint_r
    status: na
  - task: lint_c_src
    status: passed
  - task: lint_c_examples
    status: passed
  - task: lint_c_benchmarks
    status: passed
  - task: lint_c_tests_fixtures
    status: na
  - task: lint_shell
    status: na
  - task: lint_typescript_declarations
    status: na
  - task: lint_typescript_tests
    status: na
  - task: lint_license_headers
    status: passed
---

---
type: pre_push_report
description: Results of running various checks prior to pushing changes.
report:
  - task: run_javascript_examples
    status: na
  - task: run_c_examples
    status: na
  - task: run_cpp_examples
    status: na
  - task: run_javascript_readme_examples
    status: na
  - task: run_c_benchmarks
    status: na
  - task: run_cpp_benchmarks
    status: na
  - task: run_fortran_benchmarks
    status: na
  - task: run_javascript_benchmarks
    status: na
  - task: run_julia_benchmarks
    status: na
  - task: run_python_benchmarks
    status: na
  - task: run_r_benchmarks
    status: na
  - task: run_javascript_tests
    status: na
---
  • Loading branch information
@DhruvArvindSingh
DhruvArvindSingh committedDec 28, 2024
commit fee2aed95e4b893729a0e1195c2ea0de32b411a8
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,6 +147,89 @@ for ( i = 0; i < 10; i++ ) {

<!-- /.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/stats/base/dists/rayleigh/quantile.h"
```

#### stdlib_base_dists_rayleigh_quantile( p, sigma )

Evaluates the quantile function for a Rayleigh distribution.

```c
double out = stdlib_base_dists_rayleigh_quantile( 0.8, 1.0 );
// returns ~1.794
```

The function accepts the following arguments:

- **p**: `[in] double` input value.
- **sigma**: `[in] double` scale parameter.

```c
double stdlib_base_dists_rayleigh_quantile( const double p, const double sigma );
```

</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/stats/base/dists/rayleigh/quantile.h"
#include <stdlib.h>
#include <stdio.h>
static double random_uniform( const double min, const double max ) {
double v = (double)rand() / ( (double)RAND_MAX + 1.0 );
return min + ( v*(max-min) );
}
int main( void ) {
double sigma;
double p;
double y;
int i;
for ( i = 0; i < 25; i++ ) {
p = random_uniform( 0.0, 10.0 );
sigma = random_uniform( 0.0, 10.0 );
y = stdlib_base_dists_rayleigh_quantile( p, sigma );
printf( "p: %lf, σ: %lf, f(x;σ): %lf\n", p, sigma, 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
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,6 +21,7 @@
// MODULES //

var bench = require( '@stdlib/bench' );
var Float64Array = require( '@stdlib/array/float64' );
var randu = require( '@stdlib/random/base/randu' );
var isnan = require( '@stdlib/math/base/assert/is-nan' );
var EPS = require( '@stdlib/constants/float64/eps' );
Expand All@@ -32,15 +33,22 @@ var quantile = require( './../lib' );

bench( pkg, function benchmark( b ) {
var sigma;
var len;
var p;
var y;
var i;

len = 100;
p = new Float64Array( len );
sigma = new Float64Array( len );
for ( i = 0; i < len; i++ ) {
p[ i ] = randu();
sigma[ i ] = ( randu() * 20.0 ) + EPS;
}

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
p = randu();
sigma = ( randu()*20.0 ) + EPS;
y = quantile( p, sigma );
y = quantile( p[ i % len ], sigma[ i % len ] );
if ( isnan( y ) ) {
b.fail( 'should not return NaN' );
}
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2018 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 Float64Array = require( '@stdlib/array/float64' );
var tryRequire = require( '@stdlib/utils/try-require' );
var randu = require( '@stdlib/random/base/randu' );
var isnan = require( '@stdlib/math/base/assert/is-nan' );
var EPS = require( '@stdlib/constants/float64/eps' );
var pkg = require( './../package.json' ).name;


// VARIABLES //

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


// MAIN //

bench( pkg, opts, function benchmark( b ) {
var sigma;
var len;
var p;
var y;
var i;

len = 100;
p = new Float64Array( len );
sigma = new Float64Array( len );
for ( i = 0; i < len; i++ ) {
p[ i ] = ( randu() * 100.0 ) - 100;
sigma[ i ] = ( randu() * 20.0 ) + EPS;
}

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
y = quantile( p[ i % len ], sigma[ i % len ] );
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
Loading