From ca0a96e0a6fce1fa265feba257124b95722dc45f Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Sun, 7 Sep 2025 10:46:19 +0530 Subject: [PATCH 1/3] refactor: modify C implemenation to accept float instead of int32 --- 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: na - 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: na - task: lint_javascript_benchmarks status: na - 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 --- --- .../math/base/special/factorial2f/README.md | 11 ++++--- .../benchmark/c/native/benchmark.c | 4 +-- .../special/factorial2f/examples/c/example.c | 5 ++-- .../stdlib/math/base/special/factorial2f.h | 4 +-- .../math/base/special/factorial2f/lib/main.js | 7 ++--- .../base/special/factorial2f/manifest.json | 15 ++++++---- .../math/base/special/factorial2f/src/addon.c | 2 +- .../math/base/special/factorial2f/src/main.c | 30 +++++++++---------- 8 files changed, 37 insertions(+), 41 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2f/README.md b/lib/node_modules/@stdlib/math/base/special/factorial2f/README.md index 9966b952667e..db7c0eb8f153 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2f/README.md +++ b/lib/node_modules/@stdlib/math/base/special/factorial2f/README.md @@ -136,16 +136,16 @@ logEachMap( 'factorial2f(%d) = %0.1f', x, factorial2f ); Evaluates the [double factorial][double-factorial] of `n` as a single-precision floating-point number. ```c -float out = stdlib_base_factorial2f( 3 ); +float out = stdlib_base_factorial2f( 3.0f ); // returns 3.0f ``` The function accepts the following arguments: -- **n**: `[in] int32_t` input value. +- **n**: `[in] float` input value. ```c -float stdlib_base_factorial2f( const int32_t n ); +float stdlib_base_factorial2f( const float n ); ``` @@ -169,16 +169,15 @@ float stdlib_base_factorial2f( const int32_t n ); ```c #include "stdlib/math/base/special/factorial2f.h" #include -#include int main( void ) { - const int32_t x[] = { 1, 10, 50, 56, 57 }; + const float x[] = { 1.0f, 10.0f, 50.0f, 56.0f, 57.0f }; float b; int i; for ( i = 0; i < 5; i++ ) { b = stdlib_base_factorial2f( x[ i ] ); - printf ( "factorial2f(%d) = %f\n", x[ i ], b ); + printf ( "factorial2f(%lf) = %f\n", x[ i ], b ); } } ``` diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2f/benchmark/c/native/benchmark.c b/lib/node_modules/@stdlib/math/base/special/factorial2f/benchmark/c/native/benchmark.c index 3dce326fbd78..f7ac585400fe 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2f/benchmark/c/native/benchmark.c +++ b/lib/node_modules/@stdlib/math/base/special/factorial2f/benchmark/c/native/benchmark.c @@ -91,14 +91,14 @@ static float rand_float( void ) { * @return elapsed time in seconds */ static double benchmark( void ) { - int32_t x[ 100 ]; + float x[ 100 ]; double elapsed; double t; float y; int i; for ( i = 0; i < 100; i++ ) { - x[ i ] = (int32_t)( 56*rand_float() ); + x[ i ] = roundf( 56.0f * rand_float() ); } t = tic(); diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2f/examples/c/example.c b/lib/node_modules/@stdlib/math/base/special/factorial2f/examples/c/example.c index 91ee56b05395..24f60bdb5abc 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2f/examples/c/example.c +++ b/lib/node_modules/@stdlib/math/base/special/factorial2f/examples/c/example.c @@ -18,15 +18,14 @@ #include "stdlib/math/base/special/factorial2f.h" #include -#include int main( void ) { - const int32_t x[] = { 1, 10, 50, 56, 57 }; + const float x[] = { 1.0f, 10.0f, 50.0f, 56.0f, 57.0f }; float b; int i; for ( i = 0; i < 5; i++ ) { b = stdlib_base_factorial2f( x[ i ] ); - printf ( "factorial2f(%d) = %f\n", x[ i ], b ); + printf ( "factorial2f(%lf) = %f\n", x[ i ], b ); } } diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2f/include/stdlib/math/base/special/factorial2f.h b/lib/node_modules/@stdlib/math/base/special/factorial2f/include/stdlib/math/base/special/factorial2f.h index 1bfbb69a936c..bcc9c298c116 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2f/include/stdlib/math/base/special/factorial2f.h +++ b/lib/node_modules/@stdlib/math/base/special/factorial2f/include/stdlib/math/base/special/factorial2f.h @@ -19,8 +19,6 @@ #ifndef STDLIB_MATH_BASE_SPECIAL_FACTORIAL2F_H #define STDLIB_MATH_BASE_SPECIAL_FACTORIAL2F_H -#include - /* * If C++, prevent name mangling so that the compiler emits a binary file having undecorated names, thus mirroring the behavior of a C compiler. */ @@ -31,7 +29,7 @@ extern "C" { /** * Evaluates the double factorial of `n` as a single-precision floating-point number. */ -float stdlib_base_factorial2f( const int32_t n ); +float stdlib_base_factorial2f( const float n ); #ifdef __cplusplus } diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2f/lib/main.js b/lib/node_modules/@stdlib/math/base/special/factorial2f/lib/main.js index df43a587c86e..f49a82611cd3 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2f/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/factorial2f/lib/main.js @@ -21,7 +21,7 @@ // MODULES // var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); -var isIntegerf = require( '@stdlib/math/base/assert/is-integerf' ); +var isNonnegativeIntegerf = require( '@stdlib/math/base/assert/is-nonnegative-integerf' ); var isEvenf = require( '@stdlib/math/base/assert/is-evenf' ); var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' ); var PINF = require( '@stdlib/constants/float32/pinf' ); @@ -62,15 +62,12 @@ function factorial2f( n ) { var v; var i; - if ( isnanf( n ) ) { + if ( isnanf( n ) || !isNonnegativeIntegerf( n ) ) { return NaN; } if ( n > FLOAT32_MAX_NTH_DOUBLE_FACTORIAL ) { return PINF; } - if ( n < 0 || isIntegerf( n ) === false ) { - return NaN; - } v = n|0; // asm type annotation if ( v === 0|0 || v === 1|0 ) { return 1|0; // asm type annotation diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2f/manifest.json b/lib/node_modules/@stdlib/math/base/special/factorial2f/manifest.json index e908a7d99888..6f6816b29780 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2f/manifest.json +++ b/lib/node_modules/@stdlib/math/base/special/factorial2f/manifest.json @@ -37,9 +37,10 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/unary", - "@stdlib/math/base/assert/int32-is-even", + "@stdlib/math/base/assert/is-evenf", "@stdlib/constants/float32/pinf", - "@stdlib/constants/float32/max-nth-double-factorial" + "@stdlib/constants/float32/max-nth-double-factorial", + "@stdlib/math/base/assert/is-nonnegative-integerf" ] }, { @@ -53,9 +54,10 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/int32-is-even", + "@stdlib/math/base/assert/is-evenf", "@stdlib/constants/float32/pinf", - "@stdlib/constants/float32/max-nth-double-factorial" + "@stdlib/constants/float32/max-nth-double-factorial", + "@stdlib/math/base/assert/is-nonnegative-integerf" ] }, { @@ -69,9 +71,10 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/int32-is-even", + "@stdlib/math/base/assert/is-evenf", "@stdlib/constants/float32/pinf", - "@stdlib/constants/float32/max-nth-double-factorial" + "@stdlib/constants/float32/max-nth-double-factorial", + "@stdlib/math/base/assert/is-nonnegative-integerf" ] } ] diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2f/src/addon.c b/lib/node_modules/@stdlib/math/base/special/factorial2f/src/addon.c index b2b2f522d3c3..d02d1a8c4133 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2f/src/addon.c +++ b/lib/node_modules/@stdlib/math/base/special/factorial2f/src/addon.c @@ -19,4 +19,4 @@ #include "stdlib/math/base/special/factorial2f.h" #include "stdlib/math/base/napi/unary.h" -STDLIB_MATH_BASE_NAPI_MODULE_I_F( stdlib_base_factorial2f ) +STDLIB_MATH_BASE_NAPI_MODULE_F_F( stdlib_base_factorial2f ) diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2f/src/main.c b/lib/node_modules/@stdlib/math/base/special/factorial2f/src/main.c index 21420f00973e..c43f9a749333 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2f/src/main.c +++ b/lib/node_modules/@stdlib/math/base/special/factorial2f/src/main.c @@ -17,42 +17,42 @@ */ #include "stdlib/math/base/special/factorial2f.h" -#include "stdlib/math/base/assert/int32_is_even.h" +#include "stdlib/math/base/assert/is_evenf.h" #include "stdlib/constants/float32/pinf.h" #include "stdlib/constants/float32/max_nth_double_factorial.h" -#include +#include "stdlib/math/base/assert/is_nonnegative_integerf.h" /** * Evaluates the double factorial of `n` as a single-precision floating-point number. * -* @param x input value +* @param n input value * @return double factorial * * @example -* float v = stdlib_base_factorial2f( 3 ); +* float v = stdlib_base_factorial2f( 3.0f ); * // returns 3.0f */ -float stdlib_base_factorial2f( const int32_t n ) { - int32_t last; - int32_t i; +float stdlib_base_factorial2f( const float n ) { + float last; float out; + float i; + if ( !stdlib_base_is_nonnegative_integerf( n ) ) { + return 0.0f / 0.0f; // NaN + } if ( n > STDLIB_CONSTANT_FLOAT32_MAX_NTH_DOUBLE_FACTORIAL ) { return STDLIB_CONSTANT_FLOAT32_PINF; } - if ( n < 0 ) { - return 0.0f / 0.0f; // NaN - } - if ( n == 0 || n == 1 ) { + if ( n == 0.0f || n == 1.0f ) { return 1.0f; } - if ( stdlib_base_int32_is_even( n ) ) { - last = 2; + if ( stdlib_base_is_evenf( n ) ) { + last = 2.0f; } else { - last = 3; + last = 3.0f; } out = 1.0f; - for ( i = n; i >= last; i -= 2 ) { + for ( i = n; i >= last; i -= 2.0f ) { out *= i; } return out; From 4141f9d36c55078a0a5924f84071f9fbeadd3631 Mon Sep 17 00:00:00 2001 From: Athan Date: Sat, 6 Sep 2025 22:26:22 -0700 Subject: [PATCH 2/3] docs: fix interpolation string Signed-off-by: Athan --- .../@stdlib/math/base/special/factorial2f/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2f/README.md b/lib/node_modules/@stdlib/math/base/special/factorial2f/README.md index db7c0eb8f153..2c667e0f74c3 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2f/README.md +++ b/lib/node_modules/@stdlib/math/base/special/factorial2f/README.md @@ -177,7 +177,7 @@ int main( void ) { int i; for ( i = 0; i < 5; i++ ) { b = stdlib_base_factorial2f( x[ i ] ); - printf ( "factorial2f(%lf) = %f\n", x[ i ], b ); + printf ( "factorial2f(%f) = %f\n", x[ i ], b ); } } ``` From 829f160ff8c319d33171076d957d5f9ddd37ee30 Mon Sep 17 00:00:00 2001 From: Athan Date: Sat, 6 Sep 2025 22:27:03 -0700 Subject: [PATCH 3/3] docs: fix interpolation string Signed-off-by: Athan --- .../@stdlib/math/base/special/factorial2f/examples/c/example.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2f/examples/c/example.c b/lib/node_modules/@stdlib/math/base/special/factorial2f/examples/c/example.c index 24f60bdb5abc..0c0a58096a28 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2f/examples/c/example.c +++ b/lib/node_modules/@stdlib/math/base/special/factorial2f/examples/c/example.c @@ -26,6 +26,6 @@ int main( void ) { int i; for ( i = 0; i < 5; i++ ) { b = stdlib_base_factorial2f( x[ i ] ); - printf ( "factorial2f(%lf) = %f\n", x[ i ], b ); + printf ( "factorial2f(%f) = %f\n", x[ i ], b ); } }