diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2/README.md b/lib/node_modules/@stdlib/math/base/special/factorial2/README.md index 6c7618989f9a..12607f811947 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2/README.md +++ b/lib/node_modules/@stdlib/math/base/special/factorial2/README.md @@ -124,16 +124,16 @@ for ( i = 0; i < values.length; i++ ) { Evaluates the [double factorial][double-factorial] of `n`. ```c -double out = stdlib_base_factorial2( 3 ); -// returns 3 +double out = stdlib_base_factorial2( 3.0 ); +// returns 3.0 ``` The function accepts the following arguments: -- **n**: `[in] int32_t` input value. +- **n**: `[in] double` input value. ```c -double stdlib_base_factorial2( const int32_t n ); +double stdlib_base_factorial2( const double n ); ``` @@ -157,16 +157,15 @@ double stdlib_base_factorial2( const int32_t n ); ```c #include "stdlib/math/base/special/factorial2.h" #include -#include int main( void ) { - const int32_t x[] = { 1, 10, 100, 301, 302 }; + const double x[] = { 1.0, 10.0, 100.0, 301.0, 302.0 }; double b; int i; for ( i = 0; i < 5; i++ ){ b = stdlib_base_factorial2( x[ i ] ); - printf ( "factorial2(%d) = %lf\n", x[ i ], b ); + printf ( "factorial2(%lf) = %lf\n", x[ i ], b ); } } ``` diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2/benchmark/c/native/benchmark.c b/lib/node_modules/@stdlib/math/base/special/factorial2/benchmark/c/native/benchmark.c index 01b814df4cbb..55bd85409d84 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2/benchmark/c/native/benchmark.c +++ b/lib/node_modules/@stdlib/math/base/special/factorial2/benchmark/c/native/benchmark.c @@ -92,14 +92,14 @@ static double rand_double( void ) { */ static double benchmark( void ) { double elapsed; - int32_t x; + double x; double y; double t; int i; t = tic(); for ( i = 0; i < ITERATIONS; i++ ) { - x = (int32_t)(rand_double() * 301); + x = round( rand_double() * 301.0 ); y = stdlib_base_factorial2( x ); if ( y != y ) { printf( "should not return NaN\n" ); diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2/examples/c/example.c b/lib/node_modules/@stdlib/math/base/special/factorial2/examples/c/example.c index c675e14c31ee..9b67ea9d816f 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2/examples/c/example.c +++ b/lib/node_modules/@stdlib/math/base/special/factorial2/examples/c/example.c @@ -18,15 +18,14 @@ #include "stdlib/math/base/special/factorial2.h" #include -#include int main( void ) { - const int32_t x[] = { 1, 10, 100, 301, 302 }; + const double x[] = { 1.0, 10.0, 100.0, 301.0, 302.0 }; double b; int i; for ( i = 0; i < 5; i++ ) { b = stdlib_base_factorial2( x[ i ] ); - printf ( "factorial2(%d) = %lf\n", x[ i ], b ); + printf ( "factorial2(%lf) = %lf\n", x[ i ], b ); } } diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2/include/stdlib/math/base/special/factorial2.h b/lib/node_modules/@stdlib/math/base/special/factorial2/include/stdlib/math/base/special/factorial2.h index 3e9803c23f8e..8e2701b427d3 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2/include/stdlib/math/base/special/factorial2.h +++ b/lib/node_modules/@stdlib/math/base/special/factorial2/include/stdlib/math/base/special/factorial2.h @@ -19,8 +19,6 @@ #ifndef STDLIB_MATH_BASE_SPECIAL_FACTORIAL2_H #define STDLIB_MATH_BASE_SPECIAL_FACTORIAL2_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`. */ -double stdlib_base_factorial2( const int32_t n ); +double stdlib_base_factorial2( const double n ); #ifdef __cplusplus } diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2/lib/main.js b/lib/node_modules/@stdlib/math/base/special/factorial2/lib/main.js index 2730090a754a..fe59fdfec4d0 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/factorial2/lib/main.js @@ -21,7 +21,7 @@ // MODULES // var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var isInteger = require( '@stdlib/math/base/assert/is-integer' ); +var isNonnegativeInteger = require( '@stdlib/math/base/assert/is-nonnegative-integer' ); var isEven = require( '@stdlib/math/base/assert/is-even' ); var PINF = require( '@stdlib/constants/float64/pinf' ); var FLOAT64_MAX_NTH_DOUBLE_FACTORIAL = require( '@stdlib/constants/float64/max-nth-double-factorial' ); // eslint-disable-line id-length @@ -56,15 +56,12 @@ function factorial2( n ) { var out; var v; var i; - if ( isnan( n ) ) { + if ( isnan( n ) || !isNonnegativeInteger( n ) ) { return NaN; } if ( n > FLOAT64_MAX_NTH_DOUBLE_FACTORIAL ) { return PINF; } - if ( n < 0 || isInteger( 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/factorial2/manifest.json b/lib/node_modules/@stdlib/math/base/special/factorial2/manifest.json index 26fece7e4303..7600dd148cc5 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2/manifest.json +++ b/lib/node_modules/@stdlib/math/base/special/factorial2/manifest.json @@ -39,7 +39,8 @@ "@stdlib/math/base/napi/unary", "@stdlib/math/base/assert/is-even", "@stdlib/constants/float64/pinf", - "@stdlib/constants/float64/max-nth-double-factorial" + "@stdlib/constants/float64/max-nth-double-factorial", + "@stdlib/math/base/assert/is-nonnegative-integer" ] }, { @@ -55,7 +56,8 @@ "dependencies": [ "@stdlib/math/base/assert/is-even", "@stdlib/constants/float64/pinf", - "@stdlib/constants/float64/max-nth-double-factorial" + "@stdlib/constants/float64/max-nth-double-factorial", + "@stdlib/math/base/assert/is-nonnegative-integer" ] }, { @@ -71,7 +73,8 @@ "dependencies": [ "@stdlib/math/base/assert/is-even", "@stdlib/constants/float64/pinf", - "@stdlib/constants/float64/max-nth-double-factorial" + "@stdlib/constants/float64/max-nth-double-factorial", + "@stdlib/math/base/assert/is-nonnegative-integer" ] } ] diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2/src/addon.c b/lib/node_modules/@stdlib/math/base/special/factorial2/src/addon.c index 957029be8fd0..4246c5a369f4 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2/src/addon.c +++ b/lib/node_modules/@stdlib/math/base/special/factorial2/src/addon.c @@ -19,4 +19,4 @@ #include "stdlib/math/base/special/factorial2.h" #include "stdlib/math/base/napi/unary.h" -STDLIB_MATH_BASE_NAPI_MODULE_I_D( stdlib_base_factorial2 ) +STDLIB_MATH_BASE_NAPI_MODULE_D_D( stdlib_base_factorial2 ) diff --git a/lib/node_modules/@stdlib/math/base/special/factorial2/src/main.c b/lib/node_modules/@stdlib/math/base/special/factorial2/src/main.c index 06a6d4823f5b..791d0f254b68 100644 --- a/lib/node_modules/@stdlib/math/base/special/factorial2/src/main.c +++ b/lib/node_modules/@stdlib/math/base/special/factorial2/src/main.c @@ -18,42 +18,42 @@ #include "stdlib/math/base/special/factorial2.h" #include "stdlib/math/base/assert/is_even.h" +#include "stdlib/math/base/assert/is_nonnegative_integer.h" #include "stdlib/constants/float64/pinf.h" #include "stdlib/constants/float64/max_nth_double_factorial.h" -#include /** * Evaluates the double factorial of `n`. * -* @param x input value +* @param n input value * @return double factorial * * @example -* double v = stdlib_base_factorial2( 3 ); -* // returns 3 +* double v = stdlib_base_factorial2( 3.0 ); +* // returns 3.0 */ -double stdlib_base_factorial2( const int32_t n ) { - int32_t last; +double stdlib_base_factorial2( const double n ) { + double last; double out; - int32_t v; - int32_t i; + double v; + double i; + if ( !stdlib_base_is_nonnegative_integer( n ) ) { + return 0.0 / 0.0; // NaN + } if ( n > STDLIB_CONSTANT_FLOAT64_MAX_NTH_DOUBLE_FACTORIAL ) { return STDLIB_CONSTANT_FLOAT64_PINF; } - if ( n < 0 ) { - return 0.0/0.0; - } v = n; - if ( v == 0 || v == 1 ) { - return 1; + if ( v == 0.0 || v == 1.0 ) { + return 1.0; } if ( stdlib_base_is_even( v ) ) { - last = 2; + last = 2.0; } else { - last = 3; + last = 3.0; } - out = 1; - for ( i = v; i >= last; i -= 2 ) { + out = 1.0; + for ( i = v; i >= last; i -= 2.0 ) { out *= i; } return out;