From 3135ddfc4a84687716f8dd189f3637451ab96b0d Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Thu, 4 Jul 2024 15:43:46 +0530 Subject: [PATCH 1/6] feat: add C implementation for math/base/special/gamma --- .../@stdlib/math/base/special/gamma/README.md | 89 +++++++ .../gamma/benchmark/benchmark.native.js | 60 +++++ .../special/gamma/benchmark/c/native/Makefile | 146 ++++++++++ .../gamma/benchmark/c/native/benchmark.c | 136 ++++++++++ .../math/base/special/gamma/binding.gyp | 170 ++++++++++++ .../base/special/gamma/examples/c/Makefile | 146 ++++++++++ .../base/special/gamma/examples/c/example.c | 31 +++ .../math/base/special/gamma/include.gypi | 53 ++++ .../include/stdlib/math/base/special/gamma.h | 41 +++ .../math/base/special/gamma/lib/native.js | 70 +++++ .../math/base/special/gamma/lib/polyval_s.js | 2 +- .../base/special/gamma/lib/rational_pq.js | 4 +- .../math/base/special/gamma/manifest.json | 111 ++++++++ .../base/special/gamma/scripts/evalpoly.js | 47 ++++ .../special/gamma/scripts/evalrational.js | 48 ++++ .../math/base/special/gamma/src/Makefile | 70 +++++ .../math/base/special/gamma/src/addon.c | 23 ++ .../math/base/special/gamma/src/main.c | 249 ++++++++++++++++++ .../base/special/gamma/test/test.native.js | 193 ++++++++++++++ 19 files changed, 1686 insertions(+), 3 deletions(-) create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/benchmark/benchmark.native.js create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/benchmark/c/native/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/benchmark/c/native/benchmark.c create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/binding.gyp create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/examples/c/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/examples/c/example.c create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/include.gypi create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/include/stdlib/math/base/special/gamma.h create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/lib/native.js create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/manifest.json create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/src/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/src/addon.c create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/src/main.c create mode 100644 lib/node_modules/@stdlib/math/base/special/gamma/test/test.native.js diff --git a/lib/node_modules/@stdlib/math/base/special/gamma/README.md b/lib/node_modules/@stdlib/math/base/special/gamma/README.md index 9497ef594289..d0a6720a8cbf 100644 --- a/lib/node_modules/@stdlib/math/base/special/gamma/README.md +++ b/lib/node_modules/@stdlib/math/base/special/gamma/README.md @@ -121,6 +121,95 @@ for ( i = 0; i < x.length; i++ ) { + + +* * * + +
+ +## C APIs + + + +
+ +
+ + + + + +
+ +### Usage + +```c +#include "stdlib/math/base/special/gamma.h" +``` + +#### gamma( x ) + +Evaluates the [gamma function][gamma-function]. + +```c +double out = gamma( 4.0 ); +// returns 6.0 + +out = gamma( -1.5 ); +// returns ~2.363 +``` + +The function accepts the following arguments: + +- **x**: `[in] double` input value. + +```c +double gamma( const double x ); +``` + +
+ + + + + +
+ +
+ + + + + +
+ +### Examples + +```c +#include "stdlib/math/base/special/gamma.h" +#include +#include + +int main( void ) { + const double x[] = { 4.0, -1.5, -0.5, 0.5 }; + + double y; + int i; + for ( i = 0; i < 4; i++ ) { + y = stdlib_base_gamma( x[ i ] ); + printf( "gamma(%lf) = %lf\n", x[ i ], y ); + } +} +``` + +
+ + + +
+ + + From 274877f02b6b4896db26177a5895b28c8b3cf4b6 Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Sat, 13 Jul 2024 22:08:39 -0400 Subject: [PATCH 5/6] chore: remove duplicated entry from dependencies array Signed-off-by: Philipp Burckhardt --- lib/node_modules/@stdlib/math/base/special/gamma/manifest.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/gamma/manifest.json b/lib/node_modules/@stdlib/math/base/special/gamma/manifest.json index 4637ca1870f1..0b051015bd59 100644 --- a/lib/node_modules/@stdlib/math/base/special/gamma/manifest.json +++ b/lib/node_modules/@stdlib/math/base/special/gamma/manifest.json @@ -37,7 +37,6 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/unary", - "@stdlib/constants/float64/pinf", "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/assert/is-integer", "@stdlib/math/base/assert/is-negative-zero", @@ -64,7 +63,6 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/constants/float64/pinf", "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/assert/is-integer", "@stdlib/math/base/assert/is-negative-zero", @@ -91,7 +89,6 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/constants/float64/pinf", "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/assert/is-integer", "@stdlib/math/base/assert/is-negative-zero", From 8d9acb975e2764f491e28e4e2026d7019a06e012 Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Sat, 13 Jul 2024 22:11:51 -0400 Subject: [PATCH 6/6] docs: replace JSDoc annotations in C comments Signed-off-by: Philipp Burckhardt --- lib/node_modules/@stdlib/math/base/special/gamma/src/main.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/gamma/src/main.c b/lib/node_modules/@stdlib/math/base/special/gamma/src/main.c index 37fff4f2e378..0fa02d54f960 100644 --- a/lib/node_modules/@stdlib/math/base/special/gamma/src/main.c +++ b/lib/node_modules/@stdlib/math/base/special/gamma/src/main.c @@ -116,9 +116,8 @@ static double rational_pq( const double x ) { /** * Evaluates the gamma function using Stirling's formula. The polynomial is valid for \\(33 \leq x \leq 172\\). * -* @private * @param x input value -* @returns function value +* @return function value */ static double stirlingApprox( const double x ) { double w; @@ -142,10 +141,9 @@ static double stirlingApprox( const double x ) { /** * Evaluates the gamma function using a small-value approximation. * -* @private * @param x input value * @param z scale factor -* @returns function value +* @return function value */ static double smallApprox( const double x, const double z ) { return z / ( ( 1.0 + ( STDLIB_CONSTANT_FLOAT64_EULERGAMMA * x ) ) * x );