diff --git a/math/base/special/log1pmx/coverage.ndjson b/math/base/special/log1pmx/coverage.ndjson new file mode 100644 index 000000000..f0ca88147 --- /dev/null +++ b/math/base/special/log1pmx/coverage.ndjson @@ -0,0 +1 @@ +[207,207,100,12,12,100,3,3,100,207,207,100,"d2d66a7454cb0f4feaeef3cb4f762471aa64770d","2023-09-15 22:31:32 -0400"] diff --git a/math/base/special/log1pmx/index.html b/math/base/special/log1pmx/index.html new file mode 100644 index 000000000..167abcff3 --- /dev/null +++ b/math/base/special/log1pmx/index.html @@ -0,0 +1,146 @@ + + + + +
++ Press n or j to go to the next uncovered block, b, p or k for the previous block. +
+ +File | ++ | Statements | ++ | Branches | ++ | Functions | ++ | Lines | ++ |
---|---|---|---|---|---|---|---|---|---|
index.js | +
+
+ |
+ 100% | +49/49 | +100% | +1/1 | +100% | +0/0 | +100% | +49/49 | +
log1p_series.js | +
+
+ |
+ 100% | +65/65 | +100% | +3/3 | +100% | +2/2 | +100% | +65/65 | +
main.js | +
+
+ |
+ 100% | +93/93 | +100% | +8/8 | +100% | +1/1 | +100% | +93/93 | +
+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +
+ +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 | 1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + | /** +* @license Apache-2.0 +* +* Copyright (c) 2023 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'; + +/** +* Evaluate \\( \operatorname{log1pmx}(x) = \ln(1+x) - x \\). +* +* @module @stdlib/math/base/special/log1pmx +* +* @example +* var log1pmx = require( '@stdlib/math/base/special/log1pmx' ); +* +* var v = log1pmx( 1.1 ); +* // returns ~-0.358 +* +* v = log1pmx( 0.99 ); +* // returns ~-0.302 +* +* v = log1pmx( -0.99 ); +* // returns ~-3.615 +* +* v = log1pmx( NaN ); +* // returns NaN +*/ + +// MODULES // + +var log1pmx = require( './main.js' ); + + +// EXPORTS // + +module.exports = log1pmx; + |
+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +
+ +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 | 1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +100x +100x +100x +100x +100x +100x +100x +100x +100x +100x +100x +100x +100x +100x +9582x +9582x +9582x +9582x +100x +1x +1x +1x +1x +1x + | /** +* @license Apache-2.0 +* +* Copyright (c) 2023 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. +* +* +* ## Notice +* +* The original C++ code and copyright notice are from the [Boost library]{@link https://www.boost.org/doc/libs/1_83_0/boost/math/special_functions/log1p.hpp}. The implementation has been modified for JavaScript. +* +* ```text +* (C) Copyright John Maddock 2005-2006. +* +* Use, modification and distribution are subject to the +* Boost Software License, Version 1.0. (See accompanying file +* LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt) +*/ + +'use strict'; + +// MAIN // + +/** +* Creates a function to evaluate a Taylor series expansion `pow(-1, k-1) * pow(x, k) / k` for `ln(1 + x)`. +* +* @private +* @param {number} x - the value at which to evaluate the series +* @returns {Function} series function +*/ +function log1pSeries( x ) { + var mMult = -x; + var mProd = -1.0; + var k = 0; + + return next; + + /** + * Calculate the next term of the series. + * + * @private + * @returns {number} series expansion term + */ + function next() { + mProd *= mMult; + k += 1; + return mProd / k; + } +} + + +// EXPORTS // + +module.exports = log1pSeries; + |
+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +
+ +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 | 1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +302x +302x +302x +302x +100x +100x +202x +302x +100x +100x +302x +2x +2x +100x +100x +100x +100x +302x +1x +1x +1x +1x +1x + | /** +* @license Apache-2.0 +* +* Copyright (c) 2023 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. +* +* +* ## Notice +* +* The original C++ code and copyright notice are from the [Boost library]{@link https://www.boost.org/doc/libs/1_83_0/boost/math/special_functions/log1p.hpp}. The implementation has been modified for JavaScript. +* +* ```text +* (C) Copyright John Maddock 2005-2006. +* +* Use, modification and distribution are subject to the +* Boost Software License, Version 1.0. (See accompanying file +* LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt) +* ``` +*/ + +'use strict'; + +// MODULES // + +var abs = require( '@stdlib/math/base/special/abs' ); +var ln = require( '@stdlib/math/base/special/ln' ); +var FLOAT_EPS = require( '@stdlib/constants/float64/eps' ); +var sumSeries = require( '@stdlib/math/base/tools/sum-series' ); +var log1pSeries = require( './log1p_series.js' ); + + +// MAIN // + +/** +* Evaluates \\( \operatorname{log1pmx}(x) = \ln(1+x) - x \\). +* +* @param {number} x - input value +* @returns {number} function value +* +* @example +* var v = log1pmx( 1.1 ); +* // returns ~-0.358 +* +* @example +* var v = log1pmx( 0.99 ); +* // returns ~-0.302 +* +* @example +* var v = log1pmx( -0.99 ); +* // returns ~-3.615 +* +* @example +* var v = log1pmx( -1.1 ); +* // returns NaN +* +* @example +* var v = log1pmx( NaN ); +* // returns NaN +*/ +function log1pmx( x ) { + var opts; + var ax; + if ( x <= -1.0 ) { + return NaN; + } + ax = abs( x ); + if ( ax > 0.95 ) { + return ln( 1.0 + x ) - x; + } + if ( ax < FLOAT_EPS ) { + return -x * x / 2.0; + } + opts = { + 'initialValue': -x + }; + return sumSeries( log1pSeries( x ), opts ); +} + + +// EXPORTS // + +module.exports = log1pmx; + |