mathjs 14.0.1 → 14.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +9 -0
- package/NOTICE +1 -1
- package/README.md +7 -7
- package/bin/cli.js +1 -1
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +5 -5
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesRandomInt.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesRandomInt.generated.js +2 -0
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +1 -1
- package/lib/cjs/entry/pureFunctionsAny.generated.js +3 -0
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +5 -4
- package/lib/cjs/expression/embeddedDocs/function/arithmetic/sign.js +1 -1
- package/lib/cjs/function/arithmetic/log.js +12 -5
- package/lib/cjs/function/arithmetic/log10.js +15 -7
- package/lib/cjs/function/arithmetic/log2.js +9 -4
- package/lib/cjs/function/probability/randomInt.js +26 -3
- package/lib/cjs/function/relational/larger.js +12 -4
- package/lib/cjs/function/relational/smaller.js +12 -4
- package/lib/cjs/function/statistics/max.js +1 -1
- package/lib/cjs/function/statistics/min.js +1 -1
- package/lib/cjs/function/string/print.js +2 -2
- package/lib/cjs/function/utils/isInteger.js +1 -1
- package/lib/cjs/header.js +3 -3
- package/lib/cjs/utils/bigint.js +33 -0
- package/lib/cjs/utils/number.js +7 -19
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesRandomInt.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesRandomInt.generated.js +2 -0
- package/lib/esm/entry/impureFunctionsNumber.generated.js +2 -2
- package/lib/esm/entry/pureFunctionsAny.generated.js +3 -0
- package/lib/esm/entry/pureFunctionsNumber.generated.js +6 -5
- package/lib/esm/expression/embeddedDocs/function/arithmetic/sign.js +1 -1
- package/lib/esm/function/arithmetic/log.js +12 -5
- package/lib/esm/function/arithmetic/log10.js +16 -8
- package/lib/esm/function/arithmetic/log2.js +9 -4
- package/lib/esm/function/probability/randomInt.js +26 -3
- package/lib/esm/function/relational/larger.js +12 -4
- package/lib/esm/function/relational/smaller.js +12 -4
- package/lib/esm/function/statistics/max.js +1 -1
- package/lib/esm/function/statistics/min.js +1 -1
- package/lib/esm/function/string/print.js +2 -2
- package/lib/esm/function/utils/isInteger.js +1 -1
- package/lib/esm/header.js +1 -1
- package/lib/esm/utils/bigint.js +27 -0
- package/lib/esm/utils/number.js +6 -17
- package/lib/esm/version.js +1 -1
- package/package.json +13 -11
@@ -7,7 +7,7 @@ import { config } from './configReadonly.js';
|
|
7
7
|
import { createChainClass, createNode, createObjectNode, createRangeNode, createRelationalNode, createReviver, createSymbolNode, createAccessorNode, createAssignmentNode, createBlockNode, createChain, createConditionalNode, createFunctionNode, createIndexNode, createOperatorNode, createConstantNode, createFunctionAssignmentNode, createParenthesisNode, createArrayNode, createSimplifyConstant, createParse, createResolve, createSimplifyCore, createCompile, createEvaluate, createHelpClass, createParserClass, createSimplify, createDerivative, createRationalize, createHelp, createParser, createCumSumTransform, createApplyTransform, createFilterTransform, createForEachTransform, createMapTransform, createMeanTransform, createSubsetTransform, createRangeTransform, createStdTransform, createSumTransform, createMaxTransform, createMinTransform, createVarianceTransform } from '../factoriesNumber.js';
|
8
8
|
import { e, _false, index, _Infinity, LN10, LOG10E, matrix, _NaN, _null, phi, Range, replacer, ResultSet, SQRT1_2,
|
9
9
|
// eslint-disable-line camelcase
|
10
|
-
subset, tau, typed, unaryPlus, version, xor, abs, acos, acot, acsc, add, and, asec, asin, atan, atanh, bigint, bitNot, bitXor, boolean, cbrt, combinations, compare, compareText, cos, cot, csc, cube, divide, equalScalar, erf, exp, filter, forEach, format, gamma, isInteger, isNegative, isPositive, isZero, LOG2E, largerEq, leftShift, log, log1p, map, mean, mod, multiply, not, number, or, pi, pow, random, rightLogShift, SQRT2, sech, sin, size, smallerEq, square, string, subtract, tanh, typeOf, unequal, xgcd, acoth, addScalar, asech, bitAnd, combinationsWithRep, cosh, csch, divideScalar, equalText, expm1, isNumeric, LN2, lcm, log10, multiplyScalar, nthRoot, pickRandom,
|
10
|
+
subset, tau, typed, unaryPlus, version, xor, abs, acos, acot, acsc, add, and, asec, asin, atan, atanh, bigint, bitNot, bitXor, boolean, cbrt, combinations, compare, compareText, cos, cot, csc, cube, divide, equalScalar, erf, exp, filter, forEach, format, gamma, isInteger, isNegative, isPositive, isZero, LOG2E, largerEq, leftShift, log, log1p, map, mean, mod, multiply, not, number, or, pi, pow, random, rightLogShift, SQRT2, sech, sin, size, smallerEq, square, string, subtract, tanh, typeOf, unequal, xgcd, acoth, addScalar, asech, bitAnd, combinationsWithRep, cosh, csch, divideScalar, equalText, expm1, isNumeric, LN2, lcm, log10, multiplyScalar, nthRoot, pickRandom, rightArithShift, sec, sinh, sqrt, tan, unaryMinus, acosh, apply, asinh, bitOr, clone, coth, equal, factorial, hasNumericValue, isNaN, larger, log2, mode, norm, partitionSelect, print, randomInt, round, smaller, subtractScalar, _true, variance, zeta, acsch, atan2, catalan, compareNatural, composition, cumsum, floor, hypot, lgamma, median, multinomial, permutations, quantileSeq, sign, std, stirlingS2, ceil, deepEqual, fix, isPrime, numeric, prod, bellNumbers, gcd, mad, range, sum, corr, max, min } from './pureFunctionsNumber.generated.js';
|
11
11
|
var math = {}; // NOT pure!
|
12
12
|
var mathWithTransform = {}; // NOT pure!
|
13
13
|
var classes = {}; // NOT pure!
|
@@ -325,7 +325,6 @@ _extends(math, {
|
|
325
325
|
multiplyScalar,
|
326
326
|
nthRoot,
|
327
327
|
pickRandom,
|
328
|
-
randomInt,
|
329
328
|
rightArithShift,
|
330
329
|
sec,
|
331
330
|
sinh,
|
@@ -348,6 +347,7 @@ _extends(math, {
|
|
348
347
|
norm,
|
349
348
|
partitionSelect,
|
350
349
|
print,
|
350
|
+
randomInt,
|
351
351
|
round,
|
352
352
|
smaller,
|
353
353
|
subtractScalar,
|
@@ -344,6 +344,7 @@ export var isPrime = /* #__PURE__ */createIsPrime({
|
|
344
344
|
});
|
345
345
|
export var randomInt = /* #__PURE__ */createRandomInt({
|
346
346
|
config,
|
347
|
+
log2,
|
347
348
|
typed
|
348
349
|
});
|
349
350
|
export var sech = /* #__PURE__ */createSech({
|
@@ -604,6 +605,7 @@ export var round = /* #__PURE__ */createRound({
|
|
604
605
|
export var smaller = /* #__PURE__ */createSmaller({
|
605
606
|
DenseMatrix,
|
606
607
|
SparseMatrix,
|
608
|
+
bignumber,
|
607
609
|
concat,
|
608
610
|
config,
|
609
611
|
matrix,
|
@@ -783,6 +785,7 @@ export var Index = /* #__PURE__ */createIndexClass({
|
|
783
785
|
export var larger = /* #__PURE__ */createLarger({
|
784
786
|
DenseMatrix,
|
785
787
|
SparseMatrix,
|
788
|
+
bignumber,
|
786
789
|
concat,
|
787
790
|
config,
|
788
791
|
matrix,
|
@@ -5,7 +5,7 @@
|
|
5
5
|
import { config } from './configReadonly.js';
|
6
6
|
import { createE, createFalse, createIndex, createInfinity, createLN10, createLOG10E, createMatrix, createNaN, createNull, createPhi, createRangeClass, createReplacer, createResultSet, createSQRT1_2,
|
7
7
|
// eslint-disable-line camelcase
|
8
|
-
createSubset, createTau, createTyped, createUnaryPlus, createVersion, createXor, createAbs, createAcos, createAcot, createAcsc, createAdd, createAnd, createAsec, createAsin, createAtan, createAtanh, createBigint, createBitNot, createBitXor, createBoolean, createCbrt, createCombinations, createCompare, createCompareText, createCos, createCot, createCsc, createCube, createDivide, createEqualScalar, createErf, createExp, createFilter, createForEach, createFormat, createGamma, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLargerEq, createLeftShift, createLog, createLog1p, createMap, createMean, createMod, createMultiply, createNot, createNumber, createOr, createPi, createPow, createRandom, createRightLogShift, createSQRT2, createSech, createSin, createSize, createSmallerEq, createSquare, createString, createSubtract, createTanh, createTypeOf, createUnequal, createXgcd, createAcoth, createAddScalar, createAsech, createBitAnd, createCombinationsWithRep, createCosh, createCsch, createDivideScalar, createEqualText, createExpm1, createIsNumeric, createLN2, createLcm, createLog10, createMultiplyScalar, createNthRoot, createPickRandom,
|
8
|
+
createSubset, createTau, createTyped, createUnaryPlus, createVersion, createXor, createAbs, createAcos, createAcot, createAcsc, createAdd, createAnd, createAsec, createAsin, createAtan, createAtanh, createBigint, createBitNot, createBitXor, createBoolean, createCbrt, createCombinations, createCompare, createCompareText, createCos, createCot, createCsc, createCube, createDivide, createEqualScalar, createErf, createExp, createFilter, createForEach, createFormat, createGamma, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLargerEq, createLeftShift, createLog, createLog1p, createMap, createMean, createMod, createMultiply, createNot, createNumber, createOr, createPi, createPow, createRandom, createRightLogShift, createSQRT2, createSech, createSin, createSize, createSmallerEq, createSquare, createString, createSubtract, createTanh, createTypeOf, createUnequal, createXgcd, createAcoth, createAddScalar, createAsech, createBitAnd, createCombinationsWithRep, createCosh, createCsch, createDivideScalar, createEqualText, createExpm1, createIsNumeric, createLN2, createLcm, createLog10, createMultiplyScalar, createNthRoot, createPickRandom, createRightArithShift, createSec, createSinh, createSqrt, createTan, createUnaryMinus, createAcosh, createApply, createAsinh, createBitOr, createClone, createCoth, createEqual, createFactorial, createHasNumericValue, createIsNaN, createLarger, createLog2, createMode, createNorm, createPartitionSelect, createPrint, createRandomInt, createRound, createSmaller, createSubtractScalar, createTrue, createVariance, createZeta, createAcsch, createAtan2, createCatalan, createCompareNatural, createComposition, createCumSum, createFloor, createHypot, createLgamma, createMedian, createMultinomial, createPermutations, createQuantileSeq, createSign, createStd, createStirlingS2, createCeil, createDeepEqual, createFix, createIsPrime, createNumeric, createProd, createBellNumbers, createGcd, createMad, createRange, createSum, createCorr, createMax, createMin } from '../factoriesNumber.js';
|
9
9
|
export var e = /* #__PURE__ */createE({
|
10
10
|
config
|
11
11
|
});
|
@@ -296,10 +296,6 @@ export var pickRandom = /* #__PURE__ */createPickRandom({
|
|
296
296
|
config,
|
297
297
|
typed
|
298
298
|
});
|
299
|
-
export var randomInt = /* #__PURE__ */createRandomInt({
|
300
|
-
config,
|
301
|
-
typed
|
302
|
-
});
|
303
299
|
export var rightArithShift = /* #__PURE__ */createRightArithShift({
|
304
300
|
typed
|
305
301
|
});
|
@@ -376,6 +372,11 @@ export var partitionSelect = /* #__PURE__ */createPartitionSelect({
|
|
376
372
|
export var print = /* #__PURE__ */createPrint({
|
377
373
|
typed
|
378
374
|
});
|
375
|
+
export var randomInt = /* #__PURE__ */createRandomInt({
|
376
|
+
config,
|
377
|
+
log2,
|
378
|
+
typed
|
379
|
+
});
|
379
380
|
export var round = /* #__PURE__ */createRound({
|
380
381
|
typed
|
381
382
|
});
|
@@ -2,7 +2,7 @@ export var signDocs = {
|
|
2
2
|
name: 'sign',
|
3
3
|
category: 'Arithmetic',
|
4
4
|
syntax: ['sign(x)'],
|
5
|
-
description: 'Compute the sign of a value. The sign of a value x is 1 when x>
|
5
|
+
description: 'Compute the sign of a value. The sign of a value x is 1 when x>0, -1 when x<0, and 0 when x=0.',
|
6
6
|
examples: ['sign(3.5)', 'sign(-4.2)', 'sign(0)'],
|
7
7
|
seealso: ['abs']
|
8
8
|
};
|
@@ -1,7 +1,9 @@
|
|
1
1
|
import { factory } from '../../utils/factory.js';
|
2
|
+
import { promoteLogarithm } from '../../utils/bigint.js';
|
2
3
|
import { logNumber } from '../../plain/number/index.js';
|
3
4
|
var name = 'log';
|
4
5
|
var dependencies = ['config', 'typed', 'typeOf', 'divideScalar', 'Complex'];
|
6
|
+
var nlg16 = Math.log(16);
|
5
7
|
export var createLog = /* #__PURE__ */factory(name, dependencies, _ref => {
|
6
8
|
var {
|
7
9
|
typed,
|
@@ -45,24 +47,29 @@ export var createLog = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
45
47
|
* @return {number | BigNumber | Fraction | Complex}
|
46
48
|
* Returns the logarithm of `x`
|
47
49
|
*/
|
50
|
+
function complexLog(c) {
|
51
|
+
return c.log();
|
52
|
+
}
|
53
|
+
function complexLogNumber(x) {
|
54
|
+
return complexLog(new Complex(x, 0));
|
55
|
+
}
|
48
56
|
return typed(name, {
|
49
57
|
number: function number(x) {
|
50
58
|
if (x >= 0 || config.predictable) {
|
51
59
|
return logNumber(x);
|
52
60
|
} else {
|
53
61
|
// negative value -> complex value computation
|
54
|
-
return
|
62
|
+
return complexLogNumber(x);
|
55
63
|
}
|
56
64
|
},
|
57
|
-
|
58
|
-
|
59
|
-
},
|
65
|
+
bigint: promoteLogarithm(nlg16, logNumber, config, complexLogNumber),
|
66
|
+
Complex: complexLog,
|
60
67
|
BigNumber: function BigNumber(x) {
|
61
68
|
if (!x.isNegative() || config.predictable) {
|
62
69
|
return x.ln();
|
63
70
|
} else {
|
64
71
|
// downgrade to number, return Complex valued result
|
65
|
-
return
|
72
|
+
return complexLogNumber(x.toNumber());
|
66
73
|
}
|
67
74
|
},
|
68
75
|
'any, any': typed.referToSelf(self => (x, base) => {
|
@@ -1,13 +1,15 @@
|
|
1
|
-
import { factory } from '../../utils/factory.js';
|
2
|
-
import { deepMap } from '../../utils/collection.js';
|
3
1
|
import { log10Number } from '../../plain/number/index.js';
|
2
|
+
import { promoteLogarithm } from '../../utils/bigint.js';
|
3
|
+
import { deepMap } from '../../utils/collection.js';
|
4
|
+
import { factory } from '../../utils/factory.js';
|
4
5
|
var name = 'log10';
|
5
6
|
var dependencies = ['typed', 'config', 'Complex'];
|
7
|
+
var log16 = log10Number(16);
|
6
8
|
export var createLog10 = /* #__PURE__ */factory(name, dependencies, _ref => {
|
7
9
|
var {
|
8
10
|
typed,
|
9
11
|
config,
|
10
|
-
Complex
|
12
|
+
Complex
|
11
13
|
} = _ref;
|
12
14
|
/**
|
13
15
|
* Calculate the 10-base logarithm of a value. This is the same as calculating `log(x, 10)`.
|
@@ -34,24 +36,30 @@ export var createLog10 = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
34
36
|
* @return {number | BigNumber | Complex | Array | Matrix}
|
35
37
|
* Returns the 10-base logarithm of `x`
|
36
38
|
*/
|
39
|
+
|
40
|
+
function complexLog(c) {
|
41
|
+
return c.log().div(Math.LN10);
|
42
|
+
}
|
43
|
+
function complexLogNumber(x) {
|
44
|
+
return complexLog(new Complex(x, 0));
|
45
|
+
}
|
37
46
|
return typed(name, {
|
38
47
|
number: function number(x) {
|
39
48
|
if (x >= 0 || config.predictable) {
|
40
49
|
return log10Number(x);
|
41
50
|
} else {
|
42
51
|
// negative value -> complex value computation
|
43
|
-
return
|
52
|
+
return complexLogNumber(x);
|
44
53
|
}
|
45
54
|
},
|
46
|
-
|
47
|
-
|
48
|
-
},
|
55
|
+
bigint: promoteLogarithm(log16, log10Number, config, complexLogNumber),
|
56
|
+
Complex: complexLog,
|
49
57
|
BigNumber: function BigNumber(x) {
|
50
58
|
if (!x.isNegative() || config.predictable) {
|
51
59
|
return x.log();
|
52
60
|
} else {
|
53
61
|
// downgrade to number, return Complex valued result
|
54
|
-
return
|
62
|
+
return complexLogNumber(x.toNumber());
|
55
63
|
}
|
56
64
|
},
|
57
65
|
'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
|
@@ -1,6 +1,7 @@
|
|
1
|
-
import { factory } from '../../utils/factory.js';
|
2
|
-
import { deepMap } from '../../utils/collection.js';
|
3
1
|
import { log2Number } from '../../plain/number/index.js';
|
2
|
+
import { promoteLogarithm } from '../../utils/bigint.js';
|
3
|
+
import { deepMap } from '../../utils/collection.js';
|
4
|
+
import { factory } from '../../utils/factory.js';
|
4
5
|
var name = 'log2';
|
5
6
|
var dependencies = ['typed', 'config', 'Complex'];
|
6
7
|
export var createLog2 = /* #__PURE__ */factory(name, dependencies, _ref => {
|
@@ -34,22 +35,26 @@ export var createLog2 = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
34
35
|
* @return {number | BigNumber | Complex | Array | Matrix}
|
35
36
|
* Returns the 2-base logarithm of `x`
|
36
37
|
*/
|
38
|
+
function complexLog2Number(x) {
|
39
|
+
return _log2Complex(new Complex(x, 0));
|
40
|
+
}
|
37
41
|
return typed(name, {
|
38
42
|
number: function number(x) {
|
39
43
|
if (x >= 0 || config.predictable) {
|
40
44
|
return log2Number(x);
|
41
45
|
} else {
|
42
46
|
// negative value -> complex value computation
|
43
|
-
return
|
47
|
+
return complexLog2Number(x);
|
44
48
|
}
|
45
49
|
},
|
50
|
+
bigint: promoteLogarithm(4, log2Number, config, complexLog2Number),
|
46
51
|
Complex: _log2Complex,
|
47
52
|
BigNumber: function BigNumber(x) {
|
48
53
|
if (!x.isNegative() || config.predictable) {
|
49
54
|
return x.log(2);
|
50
55
|
} else {
|
51
56
|
// downgrade to number, return Complex valued result
|
52
|
-
return
|
57
|
+
return complexLog2Number(x.toNumber());
|
53
58
|
}
|
54
59
|
},
|
55
60
|
'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
|
@@ -3,11 +3,13 @@ import { randomMatrix } from './util/randomMatrix.js';
|
|
3
3
|
import { createRng } from './util/seededRNG.js';
|
4
4
|
import { isMatrix } from '../../utils/is.js';
|
5
5
|
var name = 'randomInt';
|
6
|
-
var dependencies = ['typed', 'config', '?on'];
|
6
|
+
var dependencies = ['typed', 'config', 'log2', '?on'];
|
7
|
+
var simpleCutoff = 2n ** 30n;
|
7
8
|
export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref => {
|
8
9
|
var {
|
9
10
|
typed,
|
10
11
|
config,
|
12
|
+
log2,
|
11
13
|
on
|
12
14
|
} = _ref;
|
13
15
|
// seeded pseudo random number generator
|
@@ -26,7 +28,7 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
26
28
|
*
|
27
29
|
* Syntax:
|
28
30
|
*
|
29
|
-
* math.randomInt() // generate
|
31
|
+
* math.randomInt() // generate either 0 or 1, randomly
|
30
32
|
* math.randomInt(max) // generate a random integer between 0 and max
|
31
33
|
* math.randomInt(min, max) // generate a random integer between min and max
|
32
34
|
* math.randomInt(size) // generate a matrix with random integer between 0 and 1
|
@@ -50,9 +52,11 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
50
52
|
* @return {number | Array | Matrix} A random integer value
|
51
53
|
*/
|
52
54
|
return typed(name, {
|
53
|
-
'': () => _randomInt(0,
|
55
|
+
'': () => _randomInt(0, 2),
|
54
56
|
number: max => _randomInt(0, max),
|
55
57
|
'number, number': (min, max) => _randomInt(min, max),
|
58
|
+
bigint: max => _randomBigint(0n, max),
|
59
|
+
'bigint, bigint': _randomBigint,
|
56
60
|
'Array | Matrix': size => _randomIntMatrix(size, 0, 1),
|
57
61
|
'Array | Matrix, number': (size, max) => _randomIntMatrix(size, 0, max),
|
58
62
|
'Array | Matrix, number, number': (size, min, max) => _randomIntMatrix(size, min, max)
|
@@ -64,4 +68,23 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
64
68
|
function _randomInt(min, max) {
|
65
69
|
return Math.floor(min + rng() * (max - min));
|
66
70
|
}
|
71
|
+
function _randomBigint(min, max) {
|
72
|
+
var width = max - min; // number of choices
|
73
|
+
if (width <= simpleCutoff) {
|
74
|
+
// do it with number type
|
75
|
+
return min + BigInt(_randomInt(0, Number(width)));
|
76
|
+
}
|
77
|
+
// Too big to choose accurately that way. Instead, choose the correct
|
78
|
+
// number of random bits to cover the width, and repeat until the
|
79
|
+
// resulting number falls within the width
|
80
|
+
var bits = log2(width);
|
81
|
+
var picked = width;
|
82
|
+
while (picked >= width) {
|
83
|
+
picked = 0n;
|
84
|
+
for (var i = 0; i < bits; ++i) {
|
85
|
+
picked = 2n * picked + (rng() < 0.5 ? 0n : 1n);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
return min + picked;
|
89
|
+
}
|
67
90
|
});
|
@@ -7,11 +7,12 @@ import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
|
|
7
7
|
import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
|
8
8
|
import { createCompareUnits } from './compareUnits.js';
|
9
9
|
var name = 'larger';
|
10
|
-
var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
|
10
|
+
var dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
|
11
11
|
export var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {
|
12
12
|
var {
|
13
13
|
typed,
|
14
14
|
config,
|
15
|
+
bignumber,
|
15
16
|
matrix,
|
16
17
|
DenseMatrix,
|
17
18
|
concat,
|
@@ -68,16 +69,23 @@ export var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
68
69
|
* @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
|
69
70
|
* @return {boolean | Array | Matrix} Returns true when the x is larger than y, else returns false
|
70
71
|
*/
|
72
|
+
function bignumLarger(x, y) {
|
73
|
+
return x.gt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
|
74
|
+
}
|
71
75
|
return typed(name, createLargerNumber({
|
72
76
|
typed,
|
73
77
|
config
|
74
78
|
}), {
|
75
79
|
'boolean, boolean': (x, y) => x > y,
|
76
|
-
'BigNumber, BigNumber':
|
77
|
-
return x.gt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
|
78
|
-
},
|
80
|
+
'BigNumber, BigNumber': bignumLarger,
|
79
81
|
'bigint, bigint': (x, y) => x > y,
|
80
82
|
'Fraction, Fraction': (x, y) => x.compare(y) === 1,
|
83
|
+
'Fraction, BigNumber': function Fraction_BigNumber(x, y) {
|
84
|
+
return bignumLarger(bignumber(x), y);
|
85
|
+
},
|
86
|
+
'BigNumber, Fraction': function BigNumber_Fraction(x, y) {
|
87
|
+
return bignumLarger(x, bignumber(y));
|
88
|
+
},
|
81
89
|
'Complex, Complex': function Complex_Complex() {
|
82
90
|
throw new TypeError('No ordering relation is defined for complex numbers');
|
83
91
|
}
|
@@ -7,11 +7,12 @@ import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
|
|
7
7
|
import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
|
8
8
|
import { createCompareUnits } from './compareUnits.js';
|
9
9
|
var name = 'smaller';
|
10
|
-
var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
|
10
|
+
var dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
|
11
11
|
export var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {
|
12
12
|
var {
|
13
13
|
typed,
|
14
14
|
config,
|
15
|
+
bignumber,
|
15
16
|
matrix,
|
16
17
|
DenseMatrix,
|
17
18
|
concat,
|
@@ -68,16 +69,23 @@ export var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
68
69
|
* @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
|
69
70
|
* @return {boolean | Array | Matrix} Returns true when the x is smaller than y, else returns false
|
70
71
|
*/
|
72
|
+
function bignumSmaller(x, y) {
|
73
|
+
return x.lt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
|
74
|
+
}
|
71
75
|
return typed(name, createSmallerNumber({
|
72
76
|
typed,
|
73
77
|
config
|
74
78
|
}), {
|
75
79
|
'boolean, boolean': (x, y) => x < y,
|
76
|
-
'BigNumber, BigNumber':
|
77
|
-
return x.lt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
|
78
|
-
},
|
80
|
+
'BigNumber, BigNumber': bignumSmaller,
|
79
81
|
'bigint, bigint': (x, y) => x < y,
|
80
82
|
'Fraction, Fraction': (x, y) => x.compare(y) === -1,
|
83
|
+
'Fraction, BigNumber': function Fraction_BigNumber(x, y) {
|
84
|
+
return bignumSmaller(bignumber(x), y);
|
85
|
+
},
|
86
|
+
'BigNumber, Fraction': function BigNumber_Fraction(x, y) {
|
87
|
+
return bignumSmaller(x, bignumber(y));
|
88
|
+
},
|
81
89
|
'Complex, Complex': function Complex_Complex(x, y) {
|
82
90
|
throw new TypeError('No ordering relation is defined for complex numbers');
|
83
91
|
}
|
@@ -83,7 +83,7 @@ export var createMax = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
83
83
|
var res;
|
84
84
|
deepForEach(array, function (value) {
|
85
85
|
try {
|
86
|
-
if (
|
86
|
+
if (typeof value === 'number' && isNaN(value)) {
|
87
87
|
res = NaN;
|
88
88
|
} else if (res === undefined || larger(value, res)) {
|
89
89
|
res = value;
|
@@ -83,7 +83,7 @@ export var createMin = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
83
83
|
var min;
|
84
84
|
deepForEach(array, function (value) {
|
85
85
|
try {
|
86
|
-
if (
|
86
|
+
if (typeof value === 'number' && isNaN(value)) {
|
87
87
|
min = NaN;
|
88
88
|
} else if (min === undefined || smaller(value, min)) {
|
89
89
|
min = value;
|
@@ -25,12 +25,12 @@ export var createPrint = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
25
25
|
* // the following outputs: 'The value of pi is 3.141592654'
|
26
26
|
* math.print('The value of pi is $pi', {pi: math.pi}, 10)
|
27
27
|
*
|
28
|
-
* // the following outputs: '
|
28
|
+
* // the following outputs: 'Hello Mary! The date is 2013-03-23'
|
29
29
|
* math.print('Hello $user.name! The date is $date', {
|
30
30
|
* user: {
|
31
31
|
* name: 'Mary',
|
32
32
|
* },
|
33
|
-
* date:
|
33
|
+
* date: '2013-03-23'
|
34
34
|
* })
|
35
35
|
*
|
36
36
|
* // the following outputs: 'My favorite fruits are apples and bananas !'
|
@@ -26,7 +26,7 @@ export var createIsInteger = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
26
26
|
* math.isInteger(math.fraction(4)) // returns true
|
27
27
|
* math.isInteger('3') // returns true
|
28
28
|
* math.isInteger([3, 0.5, -2]) // returns [true, false, true]
|
29
|
-
* math.isInteger(math.complex('2-4i')) // throws
|
29
|
+
* math.isInteger(math.complex('2-4i')) // throws TypeError
|
30
30
|
*
|
31
31
|
* See also:
|
32
32
|
*
|
package/lib/esm/header.js
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
* @date @@date
|
11
11
|
*
|
12
12
|
* @license
|
13
|
-
* Copyright (C) 2013-
|
13
|
+
* Copyright (C) 2013-2025 Jos de Jong <wjosdejong@gmail.com>
|
14
14
|
*
|
15
15
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
16
16
|
* use this file except in compliance with the License. You may obtain a copy
|
@@ -0,0 +1,27 @@
|
|
1
|
+
/**
|
2
|
+
* Build a bigint logarithm function from a number logarithm,
|
3
|
+
* still returning a number. The idea is that 15 hexadecimal digits
|
4
|
+
* (60 bits) saturates the mantissa of the log, and each additional hex
|
5
|
+
* digit effectively just adds the log of 16 to the resulting value. So
|
6
|
+
* convert the most significant 15 hex digits to a number and take its
|
7
|
+
* log, and then add the log of 16 for each additional hex digit that
|
8
|
+
* was in the bigint.
|
9
|
+
* For negative numbers (complex logarithms), following the bignum
|
10
|
+
* implementation, it just downgrades to number and uses the complex result.
|
11
|
+
* @param {number} log16 the log of 16
|
12
|
+
* @param {(number) -> number} numberLog the logarithm function for numbers
|
13
|
+
* @param {ConfigurationObject} config the mathjs configuration
|
14
|
+
* @param {(number) -> Complex} cplx the associated Complex log
|
15
|
+
* @returns {(bigint) -> number} the corresponding logarithm for bigints
|
16
|
+
*/
|
17
|
+
export function promoteLogarithm(log16, numberLog, config, cplx) {
|
18
|
+
return function (b) {
|
19
|
+
if (b > 0 || config.predictable) {
|
20
|
+
if (b <= 0) return NaN;
|
21
|
+
var s = b.toString(16);
|
22
|
+
var s15 = s.substring(0, 15);
|
23
|
+
return log16 * (s.length - s15.length) + numberLog(Number('0x' + s15));
|
24
|
+
}
|
25
|
+
return cplx(b.toNumber());
|
26
|
+
};
|
27
|
+
}
|
package/lib/esm/utils/number.js
CHANGED
@@ -16,16 +16,6 @@ export function isInteger(value) {
|
|
16
16
|
return isFinite(value) ? value === Math.round(value) : false;
|
17
17
|
}
|
18
18
|
|
19
|
-
/**
|
20
|
-
* Check if a string contains an integer
|
21
|
-
* @param {string} str
|
22
|
-
* @return {boolean} isInteger
|
23
|
-
*/
|
24
|
-
export function isIntegerStr(str) {
|
25
|
-
// regex matching strings like "123" and "-123"
|
26
|
-
return /^-?\d+$/.test(str);
|
27
|
-
}
|
28
|
-
|
29
19
|
/**
|
30
20
|
* Ensure the number type is compatible with the provided value.
|
31
21
|
* If not, return 'number' instead.
|
@@ -45,8 +35,12 @@ export function isIntegerStr(str) {
|
|
45
35
|
* @returns {'number' | 'BigNumber' | 'bigint' | 'Fraction'}
|
46
36
|
*/
|
47
37
|
export function safeNumberType(numberStr, config) {
|
48
|
-
if (config.number === 'bigint'
|
49
|
-
|
38
|
+
if (config.number === 'bigint') {
|
39
|
+
try {
|
40
|
+
BigInt(numberStr);
|
41
|
+
} catch (_unused) {
|
42
|
+
return config.numberFallback;
|
43
|
+
}
|
50
44
|
}
|
51
45
|
return config.number;
|
52
46
|
}
|
@@ -610,11 +604,6 @@ export function digits(value) {
|
|
610
604
|
.length;
|
611
605
|
}
|
612
606
|
|
613
|
-
/**
|
614
|
-
* Minimum number added to one that makes the result different than one
|
615
|
-
*/
|
616
|
-
export var DBL_EPSILON = Number.EPSILON || 2.2204460492503130808472633361816E-16;
|
617
|
-
|
618
607
|
/**
|
619
608
|
* Compares two floating point numbers.
|
620
609
|
* @param {number} a - First value to compare
|
package/lib/esm/version.js
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "mathjs",
|
3
|
-
"version": "14.0
|
3
|
+
"version": "14.1.0",
|
4
4
|
"description": "Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with different data types like numbers, big numbers, complex numbers, fractions, units, and matrices.",
|
5
5
|
"author": "Jos de Jong <wjosdejong@gmail.com> (https://github.com/josdejong)",
|
6
6
|
"homepage": "https://mathjs.org",
|
@@ -26,6 +26,7 @@
|
|
26
26
|
],
|
27
27
|
"dependencies": {
|
28
28
|
"@babel/runtime": "^7.25.7",
|
29
|
+
"@lambdatest/node-tunnel": "^4.0.8",
|
29
30
|
"complex.js": "^2.2.5",
|
30
31
|
"decimal.js": "^10.4.3",
|
31
32
|
"escape-latex": "^1.2.0",
|
@@ -44,13 +45,13 @@
|
|
44
45
|
"@babel/register": "7.25.9",
|
45
46
|
"@types/assert": "1.5.11",
|
46
47
|
"@types/mocha": "10.0.10",
|
47
|
-
"@typescript-eslint/eslint-plugin": "8.
|
48
|
-
"@typescript-eslint/parser": "8.
|
48
|
+
"@typescript-eslint/eslint-plugin": "8.21.0",
|
49
|
+
"@typescript-eslint/parser": "8.21.0",
|
49
50
|
"assert": "2.1.0",
|
50
51
|
"babel-loader": "9.2.1",
|
51
52
|
"c8": "10.1.3",
|
52
53
|
"codecov": "3.8.3",
|
53
|
-
"core-js": "3.
|
54
|
+
"core-js": "3.40.0",
|
54
55
|
"del": "8.0.0",
|
55
56
|
"dtslint": "4.2.1",
|
56
57
|
"eigen": "0.2.2",
|
@@ -60,24 +61,25 @@
|
|
60
61
|
"eslint-plugin-import": "2.31.0",
|
61
62
|
"eslint-plugin-mocha": "10.5.0",
|
62
63
|
"eslint-plugin-n": "16.6.2",
|
63
|
-
"eslint-plugin-prettier": "5.2.
|
64
|
+
"eslint-plugin-prettier": "5.2.3",
|
64
65
|
"eslint-plugin-promise": "6.6.0",
|
65
66
|
"expect-type": "1.1.0",
|
66
67
|
"expr-eval": "2.0.2",
|
67
68
|
"fancy-log": "2.0.0",
|
68
|
-
"glob": "11.0.
|
69
|
+
"glob": "11.0.1",
|
69
70
|
"gulp": "5.0.0",
|
70
71
|
"gulp-babel": "8.0.0",
|
71
72
|
"handlebars": "4.7.8",
|
72
73
|
"jsep": "1.4.0",
|
73
74
|
"karma": "6.4.4",
|
74
|
-
"karma-browserstack-launcher": "1.6.0",
|
75
75
|
"karma-firefox-launcher": "2.1.3",
|
76
76
|
"karma-mocha": "2.0.1",
|
77
77
|
"karma-mocha-reporter": "2.2.5",
|
78
|
+
"karma-spec-reporter": "0.0.36",
|
79
|
+
"karma-webdriver-launcher": "1.0.8",
|
78
80
|
"karma-webpack": "5.0.1",
|
79
81
|
"mkdirp": "3.0.1",
|
80
|
-
"mocha": "11.0
|
82
|
+
"mocha": "11.1.0",
|
81
83
|
"mocha-junit-reporter": "2.2.1",
|
82
84
|
"ndarray": "1.0.19",
|
83
85
|
"ndarray-determinant": "1.0.0",
|
@@ -89,9 +91,9 @@
|
|
89
91
|
"process": "0.11.10",
|
90
92
|
"sinon": "19.0.2",
|
91
93
|
"sylvester": "0.0.21",
|
92
|
-
"tinybench": "3.0
|
94
|
+
"tinybench": "3.1.0",
|
93
95
|
"ts-node": "10.9.2",
|
94
|
-
"typescript": "5.7.
|
96
|
+
"typescript": "5.7.3",
|
95
97
|
"webpack": "5.97.1",
|
96
98
|
"zeros": "1.0.0"
|
97
99
|
},
|
@@ -151,7 +153,7 @@
|
|
151
153
|
"test:node": "mocha test/node-tests/*.test.js test/node-tests/**/*.test.js",
|
152
154
|
"test:all": "npm run test:src && npm run test:generated && npm run test:node && npm run test:types",
|
153
155
|
"test:browser": "karma start test/browser-test-config/local-karma.js",
|
154
|
-
"test:
|
156
|
+
"test:lambdatest": "karma start test/browser-test-config/lambdatest-karma.js",
|
155
157
|
"test:types": " tsc -p ./tsconfig.json && node --loader ts-node/esm ./test/typescript-tests/testTypes.ts",
|
156
158
|
"coverage": "c8 --reporter=lcov --reporter=text-summary mocha test/unit-tests && echo \"\nDetailed coverage report is available at ./coverage/lcov-report/index.html\"",
|
157
159
|
"prepublishOnly": "npm run test:all && npm run lint",
|