mathjs 14.0.1 → 14.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
  };