diff --git a/lib/node_modules/@stdlib/math/base/special/ln/test/test.js b/lib/node_modules/@stdlib/math/base/special/ln/test/test.js index 1715b0f097a4..1b7098b80ff5 100644 --- a/lib/node_modules/@stdlib/math/base/special/ln/test/test.js +++ b/lib/node_modules/@stdlib/math/base/special/ln/test/test.js @@ -26,6 +26,7 @@ var PINF = require( '@stdlib/constants/float64/pinf' ); var NINF = require( '@stdlib/constants/float64/ninf' ); var EPS = require( '@stdlib/constants/float64/eps' ); var abs = require( '@stdlib/math/base/special/abs' ); +var isPositiveZero = require( '@stdlib/math/base/assert/is-positive-zero' ); var ln = require( './../lib' ); @@ -209,8 +210,9 @@ tape( 'the function evaluates the natural logarithm of `x` (subnormal values)', t.end(); }); -tape( 'the function returns `-infinity` if provided `0`', function test( t ) { - t.strictEqual( ln( 0.0 ), NINF, 'equals -infinity' ); +tape( 'the function returns `-infinity` if provided `+-0`', function test( t ) { + t.strictEqual( ln( 0.0 ), NINF, 'returns expected value' ); + t.strictEqual( ln( -0.0 ), NINF, 'returns expected value' ); t.end(); }); @@ -224,3 +226,9 @@ tape( 'the function returns `NaN` if provided a negative number', function test( t.strictEqual( isnan( v ), true, 'returns NaN' ); t.end(); }); + +tape( 'the function returns positive zero if provided `1.0`', function test( t ) { + var v = ln( 1.0 ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/ln/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/ln/test/test.native.js index 96eb31324716..27cf0b403993 100644 --- a/lib/node_modules/@stdlib/math/base/special/ln/test/test.native.js +++ b/lib/node_modules/@stdlib/math/base/special/ln/test/test.native.js @@ -27,6 +27,7 @@ var PINF = require( '@stdlib/constants/float64/pinf' ); var NINF = require( '@stdlib/constants/float64/ninf' ); var EPS = require( '@stdlib/constants/float64/eps' ); var abs = require( '@stdlib/math/base/special/abs' ); +var isPositiveZero = require( '@stdlib/math/base/assert/is-positive-zero' ); var tryRequire = require( '@stdlib/utils/try-require' ); @@ -218,8 +219,9 @@ tape( 'the function evaluates the natural logarithm of `x` (subnormal values)', t.end(); }); -tape( 'the function returns `-infinity` if provided `0`', opts, function test( t ) { - t.strictEqual( ln( 0.0 ), NINF, 'equals -infinity' ); +tape( 'the function returns `-infinity` if provided `+-0`', opts, function test( t ) { + t.strictEqual( ln( 0.0 ), NINF, 'returns expected value' ); + t.strictEqual( ln( -0.0 ), NINF, 'returns expected value' ); t.end(); }); @@ -233,3 +235,9 @@ tape( 'the function returns `NaN` if provided a negative number', opts, function t.strictEqual( isnan( v ), true, 'returns NaN' ); t.end(); }); + +tape( 'the function returns positive zero if provided `1.0`', opts, function test( t ) { + var v = ln( 1.0 ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/lnf/test/test.js b/lib/node_modules/@stdlib/math/base/special/lnf/test/test.js index cef5f3fca270..cb4d95f70afc 100644 --- a/lib/node_modules/@stdlib/math/base/special/lnf/test/test.js +++ b/lib/node_modules/@stdlib/math/base/special/lnf/test/test.js @@ -27,6 +27,7 @@ var NINF = require( '@stdlib/constants/float32/ninf' ); var EPS = require( '@stdlib/constants/float32/eps' ); var abs = require( '@stdlib/math/base/special/abs' ); var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' ); +var isPositiveZero = require( '@stdlib/math/base/assert/is-positive-zero' ); var lnf = require( './../lib' ); @@ -224,8 +225,9 @@ tape( 'the function evaluates the natural logarithm of `x` (subnormal values)', t.end(); }); -tape( 'the function returns `-infinity` if provided `0`', function test( t ) { +tape( 'the function returns `-infinity` if provided `+-0`', function test( t ) { t.strictEqual( lnf( 0.0 ), NINF, 'returns expected value' ); + t.strictEqual( lnf( -0.0 ), NINF, 'returns expected value' ); t.end(); }); @@ -239,3 +241,9 @@ tape( 'the function returns `NaN` if provided a negative number', function test( t.strictEqual( isnanf( v ), true, 'returns expected value' ); t.end(); }); + +tape( 'the function returns positive zero if provided `1.0`', function test( t ) { + var v = lnf( 1.0 ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/lnf/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/lnf/test/test.native.js index e5c5e720d1d0..4648759a52e9 100644 --- a/lib/node_modules/@stdlib/math/base/special/lnf/test/test.native.js +++ b/lib/node_modules/@stdlib/math/base/special/lnf/test/test.native.js @@ -28,6 +28,7 @@ var NINF = require( '@stdlib/constants/float32/ninf' ); var EPS = require( '@stdlib/constants/float32/eps' ); var abs = require( '@stdlib/math/base/special/abs' ); var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' ); +var isPositiveZero = require( '@stdlib/math/base/assert/is-positive-zero' ); var tryRequire = require( '@stdlib/utils/try-require' ); @@ -233,8 +234,9 @@ tape( 'the function evaluates the natural logarithm of `x` (subnormal values)', t.end(); }); -tape( 'the function returns `-infinity` if provided `0`', opts, function test( t ) { +tape( 'the function returns `-infinity` if provided `+-0`', opts, function test( t ) { t.strictEqual( lnf( 0.0 ), NINF, 'returns expected value' ); + t.strictEqual( lnf( -0.0 ), NINF, 'returns expected value' ); t.end(); }); @@ -248,3 +250,9 @@ tape( 'the function returns `NaN` if provided a negative number', opts, function t.strictEqual( isnanf( v ), true, 'returns expected value' ); t.end(); }); + +tape( 'the function returns positive zero if provided `1.0`', opts, function test( t ) { + var v = lnf( 1.0 ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/log/test/test.js b/lib/node_modules/@stdlib/math/base/special/log/test/test.js index 63b496358f06..126c53202cf2 100644 --- a/lib/node_modules/@stdlib/math/base/special/log/test/test.js +++ b/lib/node_modules/@stdlib/math/base/special/log/test/test.js @@ -26,6 +26,9 @@ var randu = require( '@stdlib/random/base/randu' ); var round = require( '@stdlib/math/base/special/round' ); var ln = require( '@stdlib/math/base/special/ln' ); var EPS = require( '@stdlib/constants/float64/eps' ); +var PINF = require( '@stdlib/constants/float64/pinf' ); +var NINF = require( '@stdlib/constants/float64/ninf' ); +var isPositiveZero = require( '@stdlib/math/base/assert/is-positive-zero' ); var log = require( './../lib' ); @@ -68,6 +71,35 @@ tape( 'the function returns `1.0` if provided `x` and `b` such that `x = b` (exc t.end(); }); +tape( 'the function returns `+infinity` if provided `x = +infinity` and a valid `b`', function test( t ) { + t.equal( log( PINF, 1.0 ), PINF, 'returns expected value' ); + t.equal( log( PINF, 2.0 ), PINF, 'returns expected value' ); + t.equal( log( PINF, 10.0 ), PINF, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns `-infinity` if provided `x = +-0` and a valid `b`', function test( t ) { + t.equal( log( 0.0, 1.0 ), NINF, 'returns expected value' ); + t.equal( log( 0.0, 2.0 ), NINF, 'returns expected value' ); + t.equal( log( 0.0, 10.0 ), NINF, 'returns expected value' ); + t.equal( log( -0.0, 1.0 ), NINF, 'returns expected value' ); + t.equal( log( -0.0, 2.0 ), NINF, 'returns expected value' ); + t.equal( log( -0.0, 10.0 ), NINF, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns positive zero if provided `x = 1.0` and a valid `b`', function test( t ) { + var v; + + v = log( 1.0, 2.0 ); + t.equal( isPositiveZero( v ), true, 'returns expected value' ); + + v = log( 1.0, 10.0 ); + t.equal( isPositiveZero( v ), true, 'returns expected value' ); + + t.end(); +}); + tape( 'the function returns `ln(x) / ln(b)`', function test( t ) { var b; var x; diff --git a/lib/node_modules/@stdlib/math/base/special/log/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/log/test/test.native.js index ad843704c813..7821625a0d31 100644 --- a/lib/node_modules/@stdlib/math/base/special/log/test/test.native.js +++ b/lib/node_modules/@stdlib/math/base/special/log/test/test.native.js @@ -27,6 +27,9 @@ var randu = require( '@stdlib/random/base/randu' ); var round = require( '@stdlib/math/base/special/round' ); var ln = require( '@stdlib/math/base/special/ln' ); var EPS = require( '@stdlib/constants/float64/eps' ); +var PINF = require( '@stdlib/constants/float64/pinf' ); +var NINF = require( '@stdlib/constants/float64/ninf' ); +var isPositiveZero = require( '@stdlib/math/base/assert/is-positive-zero' ); var tryRequire = require( '@stdlib/utils/try-require' ); @@ -77,6 +80,35 @@ tape( 'the function returns `1.0` if provided `x` and `b` such that `x = b` (exc t.end(); }); +tape( 'the function returns `+infinity` if provided `x = +infinity` and a valid `b`', opts, function test( t ) { + t.equal( log( PINF, 1.0 ), PINF, 'returns expected value' ); + t.equal( log( PINF, 2.0 ), PINF, 'returns expected value' ); + t.equal( log( PINF, 10.0 ), PINF, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns `-infinity` if provided `x = +-0` and a valid `b`', opts, function test( t ) { + t.equal( log( 0.0, 1.0 ), NINF, 'returns expected value' ); + t.equal( log( 0.0, 2.0 ), NINF, 'returns expected value' ); + t.equal( log( 0.0, 10.0 ), NINF, 'returns expected value' ); + t.equal( log( -0.0, 1.0 ), NINF, 'returns expected value' ); + t.equal( log( -0.0, 2.0 ), NINF, 'returns expected value' ); + t.equal( log( -0.0, 10.0 ), NINF, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns positive zero if provided `x = 1.0` and a valid `b`', opts, function test( t ) { + var v; + + v = log( 1.0, 2.0 ); + t.equal( isPositiveZero( v ), true, 'returns expected value' ); + + v = log( 1.0, 10.0 ); + t.equal( isPositiveZero( v ), true, 'returns expected value' ); + + t.end(); +}); + tape( 'the function returns `ln(x) / ln(b)`', opts, function test( t ) { var b; var x; diff --git a/lib/node_modules/@stdlib/math/base/special/log10/lib/main.js b/lib/node_modules/@stdlib/math/base/special/log10/lib/main.js index ace00b03412d..7ef530d2d296 100644 --- a/lib/node_modules/@stdlib/math/base/special/log10/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/log10/lib/main.js @@ -119,7 +119,7 @@ function log10( x ) { return NaN; } toWords.assign( x, WORDS, 1, 0 ); - hx = WORDS[ 0 ]; + hx = WORDS[ 0 ] | 0; // asm type annotation lx = WORDS[ 1 ]; k = 0|0; // asm type annotation @@ -132,7 +132,7 @@ function log10( x ) { // Subnormal number, scale up x: x *= TWO54; - hx = getHighWord( x ); + hx = getHighWord( x ) | 0; // asm type annotation } if ( hx >= HIGH_MAX_NORMAL_EXP ) { return x + x; diff --git a/lib/node_modules/@stdlib/math/base/special/log10/test/test.js b/lib/node_modules/@stdlib/math/base/special/log10/test/test.js index c12dbd266f26..ccbc8f46ff2a 100644 --- a/lib/node_modules/@stdlib/math/base/special/log10/test/test.js +++ b/lib/node_modules/@stdlib/math/base/special/log10/test/test.js @@ -210,8 +210,9 @@ tape( 'the function evaluates the common logarithm of `x` (subnormal values)', f t.end(); }); -tape( 'the function returns `-infinity` if provided `0`', function test( t ) { +tape( 'the function returns `-infinity` if provided `+-0`', function test( t ) { t.strictEqual( log10( 0.0 ), NINF, 'returns expected value' ); + t.strictEqual( log10( -0.0 ), NINF, 'returns expected value' ); t.end(); }); diff --git a/lib/node_modules/@stdlib/math/base/special/log10/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/log10/test/test.native.js index bec5e5566a0e..51fa687d72d4 100644 --- a/lib/node_modules/@stdlib/math/base/special/log10/test/test.native.js +++ b/lib/node_modules/@stdlib/math/base/special/log10/test/test.native.js @@ -219,8 +219,9 @@ tape( 'the function evaluates the common logarithm of `x` (subnormal values)', o t.end(); }); -tape( 'the function returns `-infinity` if provided `0`', opts, function test( t ) { +tape( 'the function returns `-infinity` if provided `+-0`', opts, function test( t ) { t.strictEqual( log10( 0.0 ), NINF, 'returns expected value' ); + t.strictEqual( log10( -0.0 ), NINF, 'returns expected value' ); t.end(); }); diff --git a/lib/node_modules/@stdlib/math/base/special/log2/lib/main.js b/lib/node_modules/@stdlib/math/base/special/log2/lib/main.js index 7860d7af1f6b..80019d4c6cb1 100644 --- a/lib/node_modules/@stdlib/math/base/special/log2/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/log2/lib/main.js @@ -116,7 +116,7 @@ function log2( x ) { return NaN; } toWords.assign( x, WORDS, 1, 0 ); - hx = WORDS[ 0 ]; + hx = WORDS[ 0 ] | 0; // asm type annotation lx = WORDS[ 1 ]; k = 0|0; // asm type annotation if ( hx < HIGH_MIN_NORMAL_EXP ) { @@ -128,7 +128,7 @@ function log2( x ) { // Subnormal number, scale up x: x *= TWO54; - hx = getHighWord( x ); + hx = getHighWord( x ) | 0; // asm type annotation } if ( hx >= HIGH_MAX_NORMAL_EXP ) { return x + x; diff --git a/lib/node_modules/@stdlib/math/base/special/log2/test/test.js b/lib/node_modules/@stdlib/math/base/special/log2/test/test.js index 2e18a3acb328..72ea2634cf17 100644 --- a/lib/node_modules/@stdlib/math/base/special/log2/test/test.js +++ b/lib/node_modules/@stdlib/math/base/special/log2/test/test.js @@ -210,8 +210,9 @@ tape( 'the function evaluates the binary logarithm of `x` (subnormal values)', f t.end(); }); -tape( 'the function returns `-infinity` if provided `0`', function test( t ) { +tape( 'the function returns `-infinity` if provided `+-0`', function test( t ) { t.strictEqual( log2( 0.0 ), NINF, 'returns expected value' ); + t.strictEqual( log2( -0.0 ), NINF, 'returns expected value' ); t.end(); }); diff --git a/lib/node_modules/@stdlib/math/base/special/log2/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/log2/test/test.native.js index df1b77609855..1e6577984df8 100644 --- a/lib/node_modules/@stdlib/math/base/special/log2/test/test.native.js +++ b/lib/node_modules/@stdlib/math/base/special/log2/test/test.native.js @@ -219,8 +219,9 @@ tape( 'the function evaluates the binary logarithm of `x` (subnormal values)', o t.end(); }); -tape( 'the function returns `-infinity` if provided `0`', opts, function test( t ) { +tape( 'the function returns `-infinity` if provided `+-0`', opts, function test( t ) { t.strictEqual( log2( 0.0 ), NINF, 'returns expected value' ); + t.strictEqual( log2( -0.0 ), NINF, 'returns expected value' ); t.end(); });