mathjs 14.0.1 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/HISTORY.md +9 -0
  2. package/NOTICE +1 -1
  3. package/README.md +7 -7
  4. package/bin/cli.js +1 -1
  5. package/lib/browser/math.js +1 -1
  6. package/lib/browser/math.js.LICENSE.txt +5 -5
  7. package/lib/browser/math.js.map +1 -1
  8. package/lib/cjs/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
  9. package/lib/cjs/entry/dependenciesAny/dependenciesRandomInt.generated.js +2 -0
  10. package/lib/cjs/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
  11. package/lib/cjs/entry/dependenciesNumber/dependenciesRandomInt.generated.js +2 -0
  12. package/lib/cjs/entry/impureFunctionsNumber.generated.js +1 -1
  13. package/lib/cjs/entry/pureFunctionsAny.generated.js +3 -0
  14. package/lib/cjs/entry/pureFunctionsNumber.generated.js +5 -4
  15. package/lib/cjs/expression/embeddedDocs/function/arithmetic/sign.js +1 -1
  16. package/lib/cjs/function/arithmetic/log.js +12 -5
  17. package/lib/cjs/function/arithmetic/log10.js +15 -7
  18. package/lib/cjs/function/arithmetic/log2.js +9 -4
  19. package/lib/cjs/function/probability/randomInt.js +26 -3
  20. package/lib/cjs/function/relational/larger.js +12 -4
  21. package/lib/cjs/function/relational/smaller.js +12 -4
  22. package/lib/cjs/function/statistics/max.js +1 -1
  23. package/lib/cjs/function/statistics/min.js +1 -1
  24. package/lib/cjs/function/string/print.js +2 -2
  25. package/lib/cjs/function/utils/isInteger.js +1 -1
  26. package/lib/cjs/header.js +3 -3
  27. package/lib/cjs/utils/bigint.js +33 -0
  28. package/lib/cjs/utils/number.js +7 -19
  29. package/lib/cjs/version.js +1 -1
  30. package/lib/esm/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
  31. package/lib/esm/entry/dependenciesAny/dependenciesRandomInt.generated.js +2 -0
  32. package/lib/esm/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
  33. package/lib/esm/entry/dependenciesNumber/dependenciesRandomInt.generated.js +2 -0
  34. package/lib/esm/entry/impureFunctionsNumber.generated.js +2 -2
  35. package/lib/esm/entry/pureFunctionsAny.generated.js +3 -0
  36. package/lib/esm/entry/pureFunctionsNumber.generated.js +6 -5
  37. package/lib/esm/expression/embeddedDocs/function/arithmetic/sign.js +1 -1
  38. package/lib/esm/function/arithmetic/log.js +12 -5
  39. package/lib/esm/function/arithmetic/log10.js +16 -8
  40. package/lib/esm/function/arithmetic/log2.js +9 -4
  41. package/lib/esm/function/probability/randomInt.js +26 -3
  42. package/lib/esm/function/relational/larger.js +12 -4
  43. package/lib/esm/function/relational/smaller.js +12 -4
  44. package/lib/esm/function/statistics/max.js +1 -1
  45. package/lib/esm/function/statistics/min.js +1 -1
  46. package/lib/esm/function/string/print.js +2 -2
  47. package/lib/esm/function/utils/isInteger.js +1 -1
  48. package/lib/esm/header.js +1 -1
  49. package/lib/esm/utils/bigint.js +27 -0
  50. package/lib/esm/utils/number.js +6 -17
  51. package/lib/esm/version.js +1 -1
  52. package/package.json +13 -11
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.largerDependencies = void 0;
7
7
  var _dependenciesDenseMatrixClassGenerated = require("./dependenciesDenseMatrixClass.generated.js");
8
8
  var _dependenciesSparseMatrixClassGenerated = require("./dependenciesSparseMatrixClass.generated.js");
9
+ var _dependenciesBignumberGenerated = require("./dependenciesBignumber.generated.js");
9
10
  var _dependenciesConcatGenerated = require("./dependenciesConcat.generated.js");
10
11
  var _dependenciesMatrixGenerated = require("./dependenciesMatrix.generated.js");
11
12
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
@@ -18,6 +19,7 @@ var _factoriesAny = require("../../factoriesAny.js");
18
19
  const largerDependencies = exports.largerDependencies = {
19
20
  DenseMatrixDependencies: _dependenciesDenseMatrixClassGenerated.DenseMatrixDependencies,
20
21
  SparseMatrixDependencies: _dependenciesSparseMatrixClassGenerated.SparseMatrixDependencies,
22
+ bignumberDependencies: _dependenciesBignumberGenerated.bignumberDependencies,
21
23
  concatDependencies: _dependenciesConcatGenerated.concatDependencies,
22
24
  matrixDependencies: _dependenciesMatrixGenerated.matrixDependencies,
23
25
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.randomIntDependencies = void 0;
7
+ var _dependenciesLog2Generated = require("./dependenciesLog2.generated.js");
7
8
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
8
9
  var _factoriesAny = require("../../factoriesAny.js");
9
10
  /**
@@ -12,6 +13,7 @@ var _factoriesAny = require("../../factoriesAny.js");
12
13
  */
13
14
 
14
15
  const randomIntDependencies = exports.randomIntDependencies = {
16
+ log2Dependencies: _dependenciesLog2Generated.log2Dependencies,
15
17
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
16
18
  createRandomInt: _factoriesAny.createRandomInt
17
19
  };
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.smallerDependencies = void 0;
7
7
  var _dependenciesDenseMatrixClassGenerated = require("./dependenciesDenseMatrixClass.generated.js");
8
8
  var _dependenciesSparseMatrixClassGenerated = require("./dependenciesSparseMatrixClass.generated.js");
9
+ var _dependenciesBignumberGenerated = require("./dependenciesBignumber.generated.js");
9
10
  var _dependenciesConcatGenerated = require("./dependenciesConcat.generated.js");
10
11
  var _dependenciesMatrixGenerated = require("./dependenciesMatrix.generated.js");
11
12
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
@@ -18,6 +19,7 @@ var _factoriesAny = require("../../factoriesAny.js");
18
19
  const smallerDependencies = exports.smallerDependencies = {
19
20
  DenseMatrixDependencies: _dependenciesDenseMatrixClassGenerated.DenseMatrixDependencies,
20
21
  SparseMatrixDependencies: _dependenciesSparseMatrixClassGenerated.SparseMatrixDependencies,
22
+ bignumberDependencies: _dependenciesBignumberGenerated.bignumberDependencies,
21
23
  concatDependencies: _dependenciesConcatGenerated.concatDependencies,
22
24
  matrixDependencies: _dependenciesMatrixGenerated.matrixDependencies,
23
25
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.randomIntDependencies = void 0;
7
+ var _dependenciesLog2Generated = require("./dependenciesLog2.generated.js");
7
8
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
8
9
  var _factoriesNumber = require("../../factoriesNumber.js");
9
10
  /**
@@ -12,6 +13,7 @@ var _factoriesNumber = require("../../factoriesNumber.js");
12
13
  */
13
14
 
14
15
  const randomIntDependencies = exports.randomIntDependencies = {
16
+ log2Dependencies: _dependenciesLog2Generated.log2Dependencies,
15
17
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
16
18
  createRandomInt: _factoriesNumber.createRandomInt
17
19
  };
@@ -339,7 +339,6 @@ const parser = exports.parser = (0, _factoriesNumber.createParser)({
339
339
  multiplyScalar: _pureFunctionsNumberGenerated.multiplyScalar,
340
340
  nthRoot: _pureFunctionsNumberGenerated.nthRoot,
341
341
  pickRandom: _pureFunctionsNumberGenerated.pickRandom,
342
- randomInt: _pureFunctionsNumberGenerated.randomInt,
343
342
  rightArithShift: _pureFunctionsNumberGenerated.rightArithShift,
344
343
  sec: _pureFunctionsNumberGenerated.sec,
345
344
  sinh: _pureFunctionsNumberGenerated.sinh,
@@ -362,6 +361,7 @@ const parser = exports.parser = (0, _factoriesNumber.createParser)({
362
361
  norm: _pureFunctionsNumberGenerated.norm,
363
362
  partitionSelect: _pureFunctionsNumberGenerated.partitionSelect,
364
363
  print: _pureFunctionsNumberGenerated.print,
364
+ randomInt: _pureFunctionsNumberGenerated.randomInt,
365
365
  round: _pureFunctionsNumberGenerated.round,
366
366
  smaller: _pureFunctionsNumberGenerated.smaller,
367
367
  subtractScalar: _pureFunctionsNumberGenerated.subtractScalar,
@@ -352,6 +352,7 @@ const isPrime = exports.isPrime = /* #__PURE__ */(0, _factoriesAny.createIsPrime
352
352
  });
353
353
  const randomInt = exports.randomInt = /* #__PURE__ */(0, _factoriesAny.createRandomInt)({
354
354
  config: _configReadonly.config,
355
+ log2,
355
356
  typed
356
357
  });
357
358
  const sech = exports.sech = /* #__PURE__ */(0, _factoriesAny.createSech)({
@@ -612,6 +613,7 @@ const round = exports.round = /* #__PURE__ */(0, _factoriesAny.createRound)({
612
613
  const smaller = exports.smaller = /* #__PURE__ */(0, _factoriesAny.createSmaller)({
613
614
  DenseMatrix,
614
615
  SparseMatrix,
616
+ bignumber,
615
617
  concat,
616
618
  config: _configReadonly.config,
617
619
  matrix,
@@ -791,6 +793,7 @@ const Index = exports.Index = /* #__PURE__ */(0, _factoriesAny.createIndexClass)
791
793
  const larger = exports.larger = /* #__PURE__ */(0, _factoriesAny.createLarger)({
792
794
  DenseMatrix,
793
795
  SparseMatrix,
796
+ bignumber,
794
797
  concat,
795
798
  config: _configReadonly.config,
796
799
  matrix,
@@ -302,10 +302,6 @@ const pickRandom = exports.pickRandom = /* #__PURE__ */(0, _factoriesNumber.crea
302
302
  config: _configReadonly.config,
303
303
  typed
304
304
  });
305
- const randomInt = exports.randomInt = /* #__PURE__ */(0, _factoriesNumber.createRandomInt)({
306
- config: _configReadonly.config,
307
- typed
308
- });
309
305
  const rightArithShift = exports.rightArithShift = /* #__PURE__ */(0, _factoriesNumber.createRightArithShift)({
310
306
  typed
311
307
  });
@@ -382,6 +378,11 @@ const partitionSelect = exports.partitionSelect = /* #__PURE__ */(0, _factoriesN
382
378
  const print = exports.print = /* #__PURE__ */(0, _factoriesNumber.createPrint)({
383
379
  typed
384
380
  });
381
+ const randomInt = exports.randomInt = /* #__PURE__ */(0, _factoriesNumber.createRandomInt)({
382
+ config: _configReadonly.config,
383
+ log2,
384
+ typed
385
+ });
385
386
  const round = exports.round = /* #__PURE__ */(0, _factoriesNumber.createRound)({
386
387
  typed
387
388
  });
@@ -8,7 +8,7 @@ const signDocs = exports.signDocs = {
8
8
  name: 'sign',
9
9
  category: 'Arithmetic',
10
10
  syntax: ['sign(x)'],
11
- description: 'Compute the sign of a value. The sign of a value x is 1 when x>1, -1 when x<0, and 0 when x=0.',
11
+ 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.',
12
12
  examples: ['sign(3.5)', 'sign(-4.2)', 'sign(0)'],
13
13
  seealso: ['abs']
14
14
  };
@@ -5,9 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createLog = void 0;
7
7
  var _factory = require("../../utils/factory.js");
8
+ var _bigint = require("../../utils/bigint.js");
8
9
  var _index = require("../../plain/number/index.js");
9
10
  const name = 'log';
10
11
  const dependencies = ['config', 'typed', 'typeOf', 'divideScalar', 'Complex'];
12
+ const nlg16 = Math.log(16);
11
13
  const createLog = exports.createLog = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
12
14
  let {
13
15
  typed,
@@ -51,24 +53,29 @@ const createLog = exports.createLog = /* #__PURE__ */(0, _factory.factory)(name,
51
53
  * @return {number | BigNumber | Fraction | Complex}
52
54
  * Returns the logarithm of `x`
53
55
  */
56
+ function complexLog(c) {
57
+ return c.log();
58
+ }
59
+ function complexLogNumber(x) {
60
+ return complexLog(new Complex(x, 0));
61
+ }
54
62
  return typed(name, {
55
63
  number: function (x) {
56
64
  if (x >= 0 || config.predictable) {
57
65
  return (0, _index.logNumber)(x);
58
66
  } else {
59
67
  // negative value -> complex value computation
60
- return new Complex(x, 0).log();
68
+ return complexLogNumber(x);
61
69
  }
62
70
  },
63
- Complex: function (x) {
64
- return x.log();
65
- },
71
+ bigint: (0, _bigint.promoteLogarithm)(nlg16, _index.logNumber, config, complexLogNumber),
72
+ Complex: complexLog,
66
73
  BigNumber: function (x) {
67
74
  if (!x.isNegative() || config.predictable) {
68
75
  return x.ln();
69
76
  } else {
70
77
  // downgrade to number, return Complex valued result
71
- return new Complex(x.toNumber(), 0).log();
78
+ return complexLogNumber(x.toNumber());
72
79
  }
73
80
  },
74
81
  'any, any': typed.referToSelf(self => (x, base) => {
@@ -4,11 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createLog10 = void 0;
7
- var _factory = require("../../utils/factory.js");
8
- var _collection = require("../../utils/collection.js");
9
7
  var _index = require("../../plain/number/index.js");
8
+ var _bigint = require("../../utils/bigint.js");
9
+ var _collection = require("../../utils/collection.js");
10
+ var _factory = require("../../utils/factory.js");
10
11
  const name = 'log10';
11
12
  const dependencies = ['typed', 'config', 'Complex'];
13
+ const log16 = (0, _index.log10Number)(16);
12
14
  const createLog10 = exports.createLog10 = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
13
15
  let {
14
16
  typed,
@@ -40,24 +42,30 @@ const createLog10 = exports.createLog10 = /* #__PURE__ */(0, _factory.factory)(n
40
42
  * @return {number | BigNumber | Complex | Array | Matrix}
41
43
  * Returns the 10-base logarithm of `x`
42
44
  */
45
+
46
+ function complexLog(c) {
47
+ return c.log().div(Math.LN10);
48
+ }
49
+ function complexLogNumber(x) {
50
+ return complexLog(new Complex(x, 0));
51
+ }
43
52
  return typed(name, {
44
53
  number: function (x) {
45
54
  if (x >= 0 || config.predictable) {
46
55
  return (0, _index.log10Number)(x);
47
56
  } else {
48
57
  // negative value -> complex value computation
49
- return new Complex(x, 0).log().div(Math.LN10);
58
+ return complexLogNumber(x);
50
59
  }
51
60
  },
52
- Complex: function (x) {
53
- return new Complex(x).log().div(Math.LN10);
54
- },
61
+ bigint: (0, _bigint.promoteLogarithm)(log16, _index.log10Number, config, complexLogNumber),
62
+ Complex: complexLog,
55
63
  BigNumber: function (x) {
56
64
  if (!x.isNegative() || config.predictable) {
57
65
  return x.log();
58
66
  } else {
59
67
  // downgrade to number, return Complex valued result
60
- return new Complex(x.toNumber(), 0).log().div(Math.LN10);
68
+ return complexLogNumber(x.toNumber());
61
69
  }
62
70
  },
63
71
  'Array | Matrix': typed.referToSelf(self => x => (0, _collection.deepMap)(x, self))
@@ -4,9 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createLog2 = void 0;
7
- var _factory = require("../../utils/factory.js");
8
- var _collection = require("../../utils/collection.js");
9
7
  var _index = require("../../plain/number/index.js");
8
+ var _bigint = require("../../utils/bigint.js");
9
+ var _collection = require("../../utils/collection.js");
10
+ var _factory = require("../../utils/factory.js");
10
11
  const name = 'log2';
11
12
  const dependencies = ['typed', 'config', 'Complex'];
12
13
  const createLog2 = exports.createLog2 = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
@@ -40,22 +41,26 @@ const createLog2 = exports.createLog2 = /* #__PURE__ */(0, _factory.factory)(nam
40
41
  * @return {number | BigNumber | Complex | Array | Matrix}
41
42
  * Returns the 2-base logarithm of `x`
42
43
  */
44
+ function complexLog2Number(x) {
45
+ return _log2Complex(new Complex(x, 0));
46
+ }
43
47
  return typed(name, {
44
48
  number: function (x) {
45
49
  if (x >= 0 || config.predictable) {
46
50
  return (0, _index.log2Number)(x);
47
51
  } else {
48
52
  // negative value -> complex value computation
49
- return _log2Complex(new Complex(x, 0));
53
+ return complexLog2Number(x);
50
54
  }
51
55
  },
56
+ bigint: (0, _bigint.promoteLogarithm)(4, _index.log2Number, config, complexLog2Number),
52
57
  Complex: _log2Complex,
53
58
  BigNumber: function (x) {
54
59
  if (!x.isNegative() || config.predictable) {
55
60
  return x.log(2);
56
61
  } else {
57
62
  // downgrade to number, return Complex valued result
58
- return _log2Complex(new Complex(x.toNumber(), 0));
63
+ return complexLog2Number(x.toNumber());
59
64
  }
60
65
  },
61
66
  'Array | Matrix': typed.referToSelf(self => x => (0, _collection.deepMap)(x, self))
@@ -9,11 +9,13 @@ var _randomMatrix = require("./util/randomMatrix.js");
9
9
  var _seededRNG = require("./util/seededRNG.js");
10
10
  var _is = require("../../utils/is.js");
11
11
  const name = 'randomInt';
12
- const dependencies = ['typed', 'config', '?on'];
12
+ const dependencies = ['typed', 'config', 'log2', '?on'];
13
+ const simpleCutoff = 2n ** 30n;
13
14
  const createRandomInt = exports.createRandomInt = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
14
15
  let {
15
16
  typed,
16
17
  config,
18
+ log2,
17
19
  on
18
20
  } = _ref;
19
21
  // seeded pseudo random number generator
@@ -32,7 +34,7 @@ const createRandomInt = exports.createRandomInt = /* #__PURE__ */(0, _factory.fa
32
34
  *
33
35
  * Syntax:
34
36
  *
35
- * math.randomInt() // generate a random integer between 0 and 1
37
+ * math.randomInt() // generate either 0 or 1, randomly
36
38
  * math.randomInt(max) // generate a random integer between 0 and max
37
39
  * math.randomInt(min, max) // generate a random integer between min and max
38
40
  * math.randomInt(size) // generate a matrix with random integer between 0 and 1
@@ -56,9 +58,11 @@ const createRandomInt = exports.createRandomInt = /* #__PURE__ */(0, _factory.fa
56
58
  * @return {number | Array | Matrix} A random integer value
57
59
  */
58
60
  return typed(name, {
59
- '': () => _randomInt(0, 1),
61
+ '': () => _randomInt(0, 2),
60
62
  number: max => _randomInt(0, max),
61
63
  'number, number': (min, max) => _randomInt(min, max),
64
+ bigint: max => _randomBigint(0n, max),
65
+ 'bigint, bigint': _randomBigint,
62
66
  'Array | Matrix': size => _randomIntMatrix(size, 0, 1),
63
67
  'Array | Matrix, number': (size, max) => _randomIntMatrix(size, 0, max),
64
68
  'Array | Matrix, number, number': (size, min, max) => _randomIntMatrix(size, min, max)
@@ -70,4 +74,23 @@ const createRandomInt = exports.createRandomInt = /* #__PURE__ */(0, _factory.fa
70
74
  function _randomInt(min, max) {
71
75
  return Math.floor(min + rng() * (max - min));
72
76
  }
77
+ function _randomBigint(min, max) {
78
+ const width = max - min; // number of choices
79
+ if (width <= simpleCutoff) {
80
+ // do it with number type
81
+ return min + BigInt(_randomInt(0, Number(width)));
82
+ }
83
+ // Too big to choose accurately that way. Instead, choose the correct
84
+ // number of random bits to cover the width, and repeat until the
85
+ // resulting number falls within the width
86
+ const bits = log2(width);
87
+ let picked = width;
88
+ while (picked >= width) {
89
+ picked = 0n;
90
+ for (let i = 0; i < bits; ++i) {
91
+ picked = 2n * picked + (rng() < 0.5 ? 0n : 1n);
92
+ }
93
+ }
94
+ return min + picked;
95
+ }
73
96
  });
@@ -13,11 +13,12 @@ var _matAlgo12xSfs = require("../../type/matrix/utils/matAlgo12xSfs.js");
13
13
  var _matrixAlgorithmSuite = require("../../type/matrix/utils/matrixAlgorithmSuite.js");
14
14
  var _compareUnits = require("./compareUnits.js");
15
15
  const name = 'larger';
16
- const dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
16
+ const dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
17
17
  const createLarger = exports.createLarger = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
18
18
  let {
19
19
  typed,
20
20
  config,
21
+ bignumber,
21
22
  matrix,
22
23
  DenseMatrix,
23
24
  concat,
@@ -74,16 +75,23 @@ const createLarger = exports.createLarger = /* #__PURE__ */(0, _factory.factory)
74
75
  * @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
75
76
  * @return {boolean | Array | Matrix} Returns true when the x is larger than y, else returns false
76
77
  */
78
+ function bignumLarger(x, y) {
79
+ return x.gt(y) && !(0, _nearlyEqual.nearlyEqual)(x, y, config.relTol, config.absTol);
80
+ }
77
81
  return typed(name, createLargerNumber({
78
82
  typed,
79
83
  config
80
84
  }), {
81
85
  'boolean, boolean': (x, y) => x > y,
82
- 'BigNumber, BigNumber': function (x, y) {
83
- return x.gt(y) && !(0, _nearlyEqual.nearlyEqual)(x, y, config.relTol, config.absTol);
84
- },
86
+ 'BigNumber, BigNumber': bignumLarger,
85
87
  'bigint, bigint': (x, y) => x > y,
86
88
  'Fraction, Fraction': (x, y) => x.compare(y) === 1,
89
+ 'Fraction, BigNumber': function (x, y) {
90
+ return bignumLarger(bignumber(x), y);
91
+ },
92
+ 'BigNumber, Fraction': function (x, y) {
93
+ return bignumLarger(x, bignumber(y));
94
+ },
87
95
  'Complex, Complex': function () {
88
96
  throw new TypeError('No ordering relation is defined for complex numbers');
89
97
  }
@@ -13,11 +13,12 @@ var _matAlgo12xSfs = require("../../type/matrix/utils/matAlgo12xSfs.js");
13
13
  var _matrixAlgorithmSuite = require("../../type/matrix/utils/matrixAlgorithmSuite.js");
14
14
  var _compareUnits = require("./compareUnits.js");
15
15
  const name = 'smaller';
16
- const dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
16
+ const dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
17
17
  const createSmaller = exports.createSmaller = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
18
18
  let {
19
19
  typed,
20
20
  config,
21
+ bignumber,
21
22
  matrix,
22
23
  DenseMatrix,
23
24
  concat,
@@ -74,16 +75,23 @@ const createSmaller = exports.createSmaller = /* #__PURE__ */(0, _factory.factor
74
75
  * @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
75
76
  * @return {boolean | Array | Matrix} Returns true when the x is smaller than y, else returns false
76
77
  */
78
+ function bignumSmaller(x, y) {
79
+ return x.lt(y) && !(0, _nearlyEqual.nearlyEqual)(x, y, config.relTol, config.absTol);
80
+ }
77
81
  return typed(name, createSmallerNumber({
78
82
  typed,
79
83
  config
80
84
  }), {
81
85
  'boolean, boolean': (x, y) => x < y,
82
- 'BigNumber, BigNumber': function (x, y) {
83
- return x.lt(y) && !(0, _nearlyEqual.nearlyEqual)(x, y, config.relTol, config.absTol);
84
- },
86
+ 'BigNumber, BigNumber': bignumSmaller,
85
87
  'bigint, bigint': (x, y) => x < y,
86
88
  'Fraction, Fraction': (x, y) => x.compare(y) === -1,
89
+ 'Fraction, BigNumber': function (x, y) {
90
+ return bignumSmaller(bignumber(x), y);
91
+ },
92
+ 'BigNumber, Fraction': function (x, y) {
93
+ return bignumSmaller(x, bignumber(y));
94
+ },
87
95
  'Complex, Complex': function (x, y) {
88
96
  throw new TypeError('No ordering relation is defined for complex numbers');
89
97
  }
@@ -89,7 +89,7 @@ const createMax = exports.createMax = /* #__PURE__ */(0, _factory.factory)(name,
89
89
  let res;
90
90
  (0, _collection.deepForEach)(array, function (value) {
91
91
  try {
92
- if (isNaN(value) && typeof value === 'number') {
92
+ if (typeof value === 'number' && isNaN(value)) {
93
93
  res = NaN;
94
94
  } else if (res === undefined || larger(value, res)) {
95
95
  res = value;
@@ -89,7 +89,7 @@ const createMin = exports.createMin = /* #__PURE__ */(0, _factory.factory)(name,
89
89
  let min;
90
90
  (0, _collection.deepForEach)(array, function (value) {
91
91
  try {
92
- if (isNaN(value) && typeof value === 'number') {
92
+ if (typeof value === 'number' && isNaN(value)) {
93
93
  min = NaN;
94
94
  } else if (min === undefined || smaller(value, min)) {
95
95
  min = value;
@@ -31,12 +31,12 @@ const createPrint = exports.createPrint = /* #__PURE__ */(0, _factory.factory)(n
31
31
  * // the following outputs: 'The value of pi is 3.141592654'
32
32
  * math.print('The value of pi is $pi', {pi: math.pi}, 10)
33
33
  *
34
- * // the following outputs: 'hello Mary! The date is 2013-03-23'
34
+ * // the following outputs: 'Hello Mary! The date is 2013-03-23'
35
35
  * math.print('Hello $user.name! The date is $date', {
36
36
  * user: {
37
37
  * name: 'Mary',
38
38
  * },
39
- * date: new Date(2013, 2, 23).toISOString().substring(0, 10)
39
+ * date: '2013-03-23'
40
40
  * })
41
41
  *
42
42
  * // the following outputs: 'My favorite fruits are apples and bananas !'
@@ -32,7 +32,7 @@ const createIsInteger = exports.createIsInteger = /* #__PURE__ */(0, _factory.fa
32
32
  * math.isInteger(math.fraction(4)) // returns true
33
33
  * math.isInteger('3') // returns true
34
34
  * math.isInteger([3, 0.5, -2]) // returns [true, false, true]
35
- * math.isInteger(math.complex('2-4i')) // throws an error
35
+ * math.isInteger(math.complex('2-4i')) // throws TypeError
36
36
  *
37
37
  * See also:
38
38
  *
package/lib/cjs/header.js CHANGED
@@ -6,11 +6,11 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 14.0.1
10
- * @date 2024-12-11
9
+ * @version 14.1.0
10
+ * @date 2025-01-24
11
11
  *
12
12
  * @license
13
- * Copyright (C) 2013-2024 Jos de Jong <wjosdejong@gmail.com>
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,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.promoteLogarithm = promoteLogarithm;
7
+ /**
8
+ * Build a bigint logarithm function from a number logarithm,
9
+ * still returning a number. The idea is that 15 hexadecimal digits
10
+ * (60 bits) saturates the mantissa of the log, and each additional hex
11
+ * digit effectively just adds the log of 16 to the resulting value. So
12
+ * convert the most significant 15 hex digits to a number and take its
13
+ * log, and then add the log of 16 for each additional hex digit that
14
+ * was in the bigint.
15
+ * For negative numbers (complex logarithms), following the bignum
16
+ * implementation, it just downgrades to number and uses the complex result.
17
+ * @param {number} log16 the log of 16
18
+ * @param {(number) -> number} numberLog the logarithm function for numbers
19
+ * @param {ConfigurationObject} config the mathjs configuration
20
+ * @param {(number) -> Complex} cplx the associated Complex log
21
+ * @returns {(bigint) -> number} the corresponding logarithm for bigints
22
+ */
23
+ function promoteLogarithm(log16, numberLog, config, cplx) {
24
+ return function (b) {
25
+ if (b > 0 || config.predictable) {
26
+ if (b <= 0) return NaN;
27
+ const s = b.toString(16);
28
+ const s15 = s.substring(0, 15);
29
+ return log16 * (s.length - s15.length) + numberLog(Number('0x' + s15));
30
+ }
31
+ return cplx(b.toNumber());
32
+ };
33
+ }
@@ -3,14 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.cbrt = exports.atanh = exports.asinh = exports.acosh = exports.DBL_EPSILON = void 0;
6
+ exports.cbrt = exports.atanh = exports.asinh = exports.acosh = void 0;
7
7
  exports.copysign = copysign;
8
8
  exports.cosh = void 0;
9
9
  exports.digits = digits;
10
10
  exports.expm1 = void 0;
11
11
  exports.format = format;
12
12
  exports.isInteger = isInteger;
13
- exports.isIntegerStr = isIntegerStr;
14
13
  exports.log2 = exports.log1p = exports.log10 = void 0;
15
14
  exports.nearlyEqual = nearlyEqual;
16
15
  exports.normalizeFormatOptions = normalizeFormatOptions;
@@ -40,16 +39,6 @@ function isInteger(value) {
40
39
  return isFinite(value) ? value === Math.round(value) : false;
41
40
  }
42
41
 
43
- /**
44
- * Check if a string contains an integer
45
- * @param {string} str
46
- * @return {boolean} isInteger
47
- */
48
- function isIntegerStr(str) {
49
- // regex matching strings like "123" and "-123"
50
- return /^-?\d+$/.test(str);
51
- }
52
-
53
42
  /**
54
43
  * Ensure the number type is compatible with the provided value.
55
44
  * If not, return 'number' instead.
@@ -69,8 +58,12 @@ function isIntegerStr(str) {
69
58
  * @returns {'number' | 'BigNumber' | 'bigint' | 'Fraction'}
70
59
  */
71
60
  function safeNumberType(numberStr, config) {
72
- if (config.number === 'bigint' && !isIntegerStr(numberStr)) {
73
- return config.numberFallback;
61
+ if (config.number === 'bigint') {
62
+ try {
63
+ BigInt(numberStr);
64
+ } catch (_unused) {
65
+ return config.numberFallback;
66
+ }
74
67
  }
75
68
  return config.number;
76
69
  }
@@ -634,11 +627,6 @@ function digits(value) {
634
627
  .length;
635
628
  }
636
629
 
637
- /**
638
- * Minimum number added to one that makes the result different than one
639
- */
640
- const DBL_EPSILON = exports.DBL_EPSILON = Number.EPSILON || 2.2204460492503130808472633361816E-16;
641
-
642
630
  /**
643
631
  * Compares two floating point numbers.
644
632
  * @param {number} a - First value to compare
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- const version = exports.version = '14.0.1';
7
+ const version = exports.version = '14.1.0';
8
8
  // Note: This file is automatically generated when building math.js.
9
9
  // Changes made in this file will be overwritten.
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { DenseMatrixDependencies } from './dependenciesDenseMatrixClass.generated.js';
6
6
  import { SparseMatrixDependencies } from './dependenciesSparseMatrixClass.generated.js';
7
+ import { bignumberDependencies } from './dependenciesBignumber.generated.js';
7
8
  import { concatDependencies } from './dependenciesConcat.generated.js';
8
9
  import { matrixDependencies } from './dependenciesMatrix.generated.js';
9
10
  import { typedDependencies } from './dependenciesTyped.generated.js';
@@ -11,6 +12,7 @@ import { createLarger } from '../../factoriesAny.js';
11
12
  export var largerDependencies = {
12
13
  DenseMatrixDependencies,
13
14
  SparseMatrixDependencies,
15
+ bignumberDependencies,
14
16
  concatDependencies,
15
17
  matrixDependencies,
16
18
  typedDependencies,
@@ -2,9 +2,11 @@
2
2
  * THIS FILE IS AUTO-GENERATED
3
3
  * DON'T MAKE CHANGES HERE
4
4
  */
5
+ import { log2Dependencies } from './dependenciesLog2.generated.js';
5
6
  import { typedDependencies } from './dependenciesTyped.generated.js';
6
7
  import { createRandomInt } from '../../factoriesAny.js';
7
8
  export var randomIntDependencies = {
9
+ log2Dependencies,
8
10
  typedDependencies,
9
11
  createRandomInt
10
12
  };
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { DenseMatrixDependencies } from './dependenciesDenseMatrixClass.generated.js';
6
6
  import { SparseMatrixDependencies } from './dependenciesSparseMatrixClass.generated.js';
7
+ import { bignumberDependencies } from './dependenciesBignumber.generated.js';
7
8
  import { concatDependencies } from './dependenciesConcat.generated.js';
8
9
  import { matrixDependencies } from './dependenciesMatrix.generated.js';
9
10
  import { typedDependencies } from './dependenciesTyped.generated.js';
@@ -11,6 +12,7 @@ import { createSmaller } from '../../factoriesAny.js';
11
12
  export var smallerDependencies = {
12
13
  DenseMatrixDependencies,
13
14
  SparseMatrixDependencies,
15
+ bignumberDependencies,
14
16
  concatDependencies,
15
17
  matrixDependencies,
16
18
  typedDependencies,
@@ -2,9 +2,11 @@
2
2
  * THIS FILE IS AUTO-GENERATED
3
3
  * DON'T MAKE CHANGES HERE
4
4
  */
5
+ import { log2Dependencies } from './dependenciesLog2.generated.js';
5
6
  import { typedDependencies } from './dependenciesTyped.generated.js';
6
7
  import { createRandomInt } from '../../factoriesNumber.js';
7
8
  export var randomIntDependencies = {
9
+ log2Dependencies,
8
10
  typedDependencies,
9
11
  createRandomInt
10
12
  };