Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
692afcb
refactor: update `stats/base/dnanmeanpn` native addon from C++ to C
Neerajpathak07 Dec 27, 2024
e010038
Merge branch 'develop' of https://github.com/0PrashantYadav0/stdlib i…
0PrashantYadav0 Dec 27, 2024
cc882e9
Merge branch 'develop' of https://github.com/0PrashantYadav0/stdlib i…
0PrashantYadav0 Dec 28, 2024
e9f48a5
Merge branch 'stdlib-js:develop' into develop
0PrashantYadav0 Dec 28, 2024
fbf72b5
feat: add C implementation for binomail cdf
0PrashantYadav0 Dec 31, 2024
d84fd0d
docs: edited readme file
0PrashantYadav0 Dec 31, 2024
262d3ca
docs: change in example
0PrashantYadav0 Dec 31, 2024
2f88c92
feat: add C implementation for binomail quantile
0PrashantYadav0 Dec 31, 2024
e9a321a
chore: update copyright years
stdlib-bot Jan 6, 2025
b3ee396
chore: updated int to double
0PrashantYadav0 Jan 6, 2025
7eca9d0
Merge branch 'binomial/quantile' of https://github.com/0PrashantYadav…
0PrashantYadav0 Jan 6, 2025
a77b2dd
fix: removed unwanted files
0PrashantYadav0 Jan 6, 2025
cca55a0
Merge branch 'develop' into binomial/quantile
Planeshifter Jun 23, 2025
3b10bb2
fix: address immediate issues in `binomial/quantile`
Planeshifter Jun 23, 2025
1a82dd5
feat: refactor C implementation to use Cornish-Fisher expansion algor…
Planeshifter Jun 23, 2025
6499361
Merge branch 'develop' into binomial/quantile
0PrashantYadav0 Jul 3, 2026
611a9bb
Merge branch 'develop' into binomial/quantile
Neerajpathak07 Jul 23, 2026
dc2b81e
chore: initial clean-up
Neerajpathak07 Jul 23, 2026
a08c3bb
chore: update copyright years
stdlib-bot Jul 23, 2026
9893bd9
chore: update package description
Neerajpathak07 Jul 23, 2026
96dc406
chore: update native tests with strictEqual
Neerajpathak07 Jul 23, 2026
561fae6
Merge remote-tracking branch 'upstream/develop' into binomial/quantile
stdlib-bot Jul 24, 2026
b25736a
fix: add static qualifier to helpers, fix JSDoc copy-paste, and addre…
Planeshifter Jul 24, 2026
c0eb547
style: add missing space
Planeshifter Jul 24, 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
107 changes: 107 additions & 0 deletions lib/node_modules/@stdlib/stats/base/dists/binomial/quantile/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,113 @@ logEachMap( 'r: %0.4f, n: %0.4f, p: %0.4f, Q(r;n,p): %0.4f', r, n, p, quantile )

<!-- /.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/binomial/quantile.h"
```

#### stdlib_base_dists_binomial_quantile( r, n, p )

Evaluates the [quantile function][quantile-function] for a [binomial][binomial-distribution] distribution with number of trials `n` and success probability `p` at a probability `r`.

```c
double out = stdlib_base_dists_binomial_quantile( 0.4, 20.0, 0.2 );
// returns 3.0
```

The function accepts the following arguments:

- **r**: `[in] double` input probability.
- **n**: `[in] double` number of trials.
- **p**: `[in] double` success probability.

```c
double stdlib_base_dists_binomial_quantile( const double r, const double n, const double p );
```

</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/binomial/quantile.h"
#include "stdlib/math/base/special/ceil.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 n;
double p;
double r;
double y;
int i;

for ( i = 0; i < 25; i++ ) {
r = random_uniform( 0.0, 1.0 );
n = stdlib_base_ceil( random_uniform( 0.0, 100.0 ) );
p = random_uniform( 0.0, 1.0 );
y = stdlib_base_dists_binomial_quantile( r, n, p );
printf( "r: %lf, n: %lf, p: %lf, Q(r;n,p): %lf\n", r, n, p, y );
}

return 0;
}
```

</section>

<!-- /.examples -->

</section>

<!-- /.c -->

<!-- Section to include cited references. If references are included, add a horizontal rule *before* the section. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->

<section class="references">

</section>

<!-- /.references -->

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

<section class="related">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/**
* @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 resolve = require( 'path' ).resolve;
var bench = require( '@stdlib/bench' );
var tryRequire = require( '@stdlib/utils/try-require' );
var uniform = require( '@stdlib/random/array/uniform' );
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var format = require( '@stdlib/string/format' );
var isnan = require( '@stdlib/math/base/assert/is-nan' );
var pkg = require( './../package.json' ).name;


// VARIABLES //

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


// MAIN //

bench( format( '%s::native', pkg ), opts, function benchmark( b ) {
var arrayOpts;
var n;
var p;
var r;
var y;
var i;

arrayOpts = {
'dtype': 'float64'
};
r = uniform( 100, 0.0, 1.0, arrayOpts );
n = discreteUniform( 100, 1, 100, arrayOpts );
p = uniform( 100, 0.0, 1.0, arrayOpts );

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
y = quantile( r[ i % r.length ], n[ i % n.length ], p[ i % p.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();
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
#/
# @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.
#/

# VARIABLES #

ifndef VERBOSE
QUIET := @
else
QUIET :=
endif

# Determine the OS ([1][1], [2][2]).
#
# [1]: https://en.wikipedia.org/wiki/Uname#Examples
# [2]: http://stackoverflow.com/a/27776822/2225624
OS ?= $(shell uname)
ifneq (, $(findstring MINGW,$(OS)))
OS := WINNT
else
ifneq (, $(findstring MSYS,$(OS)))
OS := WINNT
else
ifneq (, $(findstring CYGWIN,$(OS)))
OS := WINNT
else
ifneq (, $(findstring Windows_NT,$(OS)))
OS := WINNT
endif
endif
endif
endif

# Define the program used for compiling C source files:
ifdef C_COMPILER
CC := $(C_COMPILER)
else
CC := gcc
endif

# Define the command-line options when compiling C files:
CFLAGS ?= \
-std=c99 \
-O3 \
-Wall \
-pedantic

# Determine whether to generate position independent code ([1][1], [2][2]).
#
# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options
# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option
ifeq ($(OS), WINNT)
fPIC ?=
else
fPIC ?= -fPIC
endif

# List of includes (e.g., `-I /foo/bar -I /beep/boop/include`):
INCLUDE ?=

# List of source files:
SOURCE_FILES ?=

# List of libraries (e.g., `-lopenblas -lpthread`):
LIBRARIES ?=

# List of library paths (e.g., `-L /foo/bar -L /beep/boop`):
LIBPATH ?=

# List of C targets:
c_targets := benchmark.out


# RULES #

#/
# Compiles source files.
#
# @param {string} [C_COMPILER] - C compiler (e.g., `gcc`)
# @param {string} [CFLAGS] - C compiler options
# @param {(string|void)} [fPIC] - compiler flag determining whether to generate position independent code (e.g., `-fPIC`)
# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`)
# @param {string} [SOURCE_FILES] - list of source files
# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`)
# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`)
#
# @example
# make
#
# @example
# make all
#/
all: $(c_targets)

.PHONY: all

#/
# Compiles C source files.
#
# @private
# @param {string} CC - C compiler (e.g., `gcc`)
# @param {string} CFLAGS - C compiler options
# @param {(string|void)} fPIC - compiler flag determining whether to generate position independent code (e.g., `-fPIC`)
# @param {string} INCLUDE - list of includes (e.g., `-I /foo/bar`)
# @param {string} SOURCE_FILES - list of source files
# @param {string} LIBPATH - list of library paths (e.g., `-L /foo/bar`)
# @param {string} LIBRARIES - list of libraries (e.g., `-lopenblas`)
#/
$(c_targets): %.out: %.c
$(QUIET) $(CC) $(CFLAGS) $(fPIC) $(INCLUDE) -o $@ $(SOURCE_FILES) $< $(LIBPATH) -lm $(LIBRARIES)

#/
# Runs compiled benchmarks.
#
# @example
# make run
#/
run: $(c_targets)
$(QUIET) ./$<

.PHONY: run

#/
# Removes generated files.
#
# @example
# make clean
#/
clean:
$(QUIET) -rm -f *.o *.out

.PHONY: clean
Loading