mathjs 14.5.3 → 14.6.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 (31) hide show
  1. package/HISTORY.md +9 -1
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +2 -2
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/entry/dependenciesAny/dependenciesToBest.generated.js +17 -0
  6. package/lib/cjs/entry/dependenciesAny/dependenciesUnitClass.generated.js +2 -0
  7. package/lib/cjs/entry/dependenciesAny.generated.js +7 -0
  8. package/lib/cjs/entry/impureFunctionsAny.generated.js +1 -0
  9. package/lib/cjs/entry/pureFunctionsAny.generated.js +7 -3
  10. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
  11. package/lib/cjs/expression/embeddedDocs/function/units/toBest.js +14 -0
  12. package/lib/cjs/factoriesAny.js +7 -0
  13. package/lib/cjs/function/arithmetic/sign.js +1 -1
  14. package/lib/cjs/function/unit/toBest.js +53 -0
  15. package/lib/cjs/header.js +2 -2
  16. package/lib/cjs/type/unit/Unit.js +106 -19
  17. package/lib/cjs/version.js +1 -1
  18. package/lib/esm/entry/dependenciesAny/dependenciesToBest.generated.js +10 -0
  19. package/lib/esm/entry/dependenciesAny/dependenciesUnitClass.generated.js +2 -0
  20. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  21. package/lib/esm/entry/impureFunctionsAny.generated.js +2 -1
  22. package/lib/esm/entry/pureFunctionsAny.generated.js +6 -2
  23. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  24. package/lib/esm/expression/embeddedDocs/function/units/toBest.js +8 -0
  25. package/lib/esm/factoriesAny.js +1 -0
  26. package/lib/esm/function/arithmetic/sign.js +1 -1
  27. package/lib/esm/function/unit/toBest.js +47 -0
  28. package/lib/esm/type/unit/Unit.js +106 -19
  29. package/lib/esm/version.js +1 -1
  30. package/package.json +7 -7
  31. package/types/index.d.ts +31 -0
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.toBestDependencies = void 0;
7
+ var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
8
+ var _factoriesAny = require("../../factoriesAny.js");
9
+ /**
10
+ * THIS FILE IS AUTO-GENERATED
11
+ * DON'T MAKE CHANGES HERE
12
+ */
13
+
14
+ const toBestDependencies = exports.toBestDependencies = {
15
+ typedDependencies: _dependenciesTypedGenerated.typedDependencies,
16
+ createToBest: _factoriesAny.createToBest
17
+ };
@@ -19,6 +19,7 @@ var _dependenciesNumberGenerated = require("./dependenciesNumber.generated.js");
19
19
  var _dependenciesPowGenerated = require("./dependenciesPow.generated.js");
20
20
  var _dependenciesRoundGenerated = require("./dependenciesRound.generated.js");
21
21
  var _dependenciesSubtractScalarGenerated = require("./dependenciesSubtractScalar.generated.js");
22
+ var _dependenciesToBestGenerated = require("./dependenciesToBest.generated.js");
22
23
  var _factoriesAny = require("../../factoriesAny.js");
23
24
  /**
24
25
  * THIS FILE IS AUTO-GENERATED
@@ -41,5 +42,6 @@ const UnitDependencies = exports.UnitDependencies = {
41
42
  powDependencies: _dependenciesPowGenerated.powDependencies,
42
43
  roundDependencies: _dependenciesRoundGenerated.roundDependencies,
43
44
  subtractScalarDependencies: _dependenciesSubtractScalarGenerated.subtractScalarDependencies,
45
+ toBestDependencies: _dependenciesToBestGenerated.toBestDependencies,
44
46
  createUnitClass: _factoriesAny.createUnitClass
45
47
  };
@@ -2049,6 +2049,12 @@ Object.defineProperty(exports, "thomsonCrossSectionDependencies", {
2049
2049
  return _dependenciesThomsonCrossSectionGenerated.thomsonCrossSectionDependencies;
2050
2050
  }
2051
2051
  });
2052
+ Object.defineProperty(exports, "toBestDependencies", {
2053
+ enumerable: true,
2054
+ get: function () {
2055
+ return _dependenciesToBestGenerated.toBestDependencies;
2056
+ }
2057
+ });
2052
2058
  Object.defineProperty(exports, "toDependencies", {
2053
2059
  enumerable: true,
2054
2060
  get: function () {
@@ -2525,6 +2531,7 @@ var _dependenciesTanhGenerated = require("./dependenciesAny/dependenciesTanh.gen
2525
2531
  var _dependenciesTauGenerated = require("./dependenciesAny/dependenciesTau.generated.js");
2526
2532
  var _dependenciesThomsonCrossSectionGenerated = require("./dependenciesAny/dependenciesThomsonCrossSection.generated.js");
2527
2533
  var _dependenciesToGenerated = require("./dependenciesAny/dependenciesTo.generated.js");
2534
+ var _dependenciesToBestGenerated = require("./dependenciesAny/dependenciesToBest.generated.js");
2528
2535
  var _dependenciesTraceGenerated = require("./dependenciesAny/dependenciesTrace.generated.js");
2529
2536
  var _dependenciesTransposeGenerated = require("./dependenciesAny/dependenciesTranspose.generated.js");
2530
2537
  var _dependenciesTrueGenerated = require("./dependenciesAny/dependenciesTrue.generated.js");
@@ -336,6 +336,7 @@ const help = exports.help = (0, _factoriesAny.createHelp)({
336
336
  string: _pureFunctionsAnyGenerated.string,
337
337
  subtractScalar: _pureFunctionsAnyGenerated.subtractScalar,
338
338
  tan: _pureFunctionsAnyGenerated.tan,
339
+ toBest: _pureFunctionsAnyGenerated.toBest,
339
340
  typeOf: _pureFunctionsAnyGenerated.typeOf,
340
341
  acosh: _pureFunctionsAnyGenerated.acosh,
341
342
  acsch: _pureFunctionsAnyGenerated.acsch,
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.dotPow = exports.dotMultiply = exports.dotDivide = exports.dot = exports.divideScalar = exports.divide = exports.distance = exports.diff = exports.diag = exports.deuteronMass = exports.det = exports.deepEqual = exports.cumsum = exports.cube = exports.ctranspose = exports.csch = exports.csc = exports.cross = exports.createUnit = exports.count = exports.coulombConstant = exports.coulomb = exports.coth = exports.cot = exports.cosh = exports.cos = exports.corr = exports.conj = exports.conductanceQuantum = exports.concat = exports.composition = exports.complex = exports.compareText = exports.compareNatural = exports.compare = exports.combinationsWithRep = exports.combinations = exports.column = exports.clone = exports.classicalElectronRadius = exports.ceil = exports.cbrt = exports.catalan = exports.boolean = exports.boltzmann = exports.bohrRadius = exports.bohrMagneton = exports.bitXor = exports.bitOr = exports.bitNot = exports.bitAnd = exports.bin = exports.bignumber = exports.bigint = exports.bellNumbers = exports.avogadro = exports.atomicMass = exports.atanh = exports.atan2 = exports.atan = exports.asinh = exports.asin = exports.asech = exports.asec = exports.arg = exports.apply = exports.and = exports.addScalar = exports.add = exports.acsch = exports.acsc = exports.acoth = exports.acot = exports.acosh = exports.acos = exports.abs = exports._true = exports._null = exports._false = exports._NaN = exports._Infinity = exports.Unit = exports.SparseMatrix = exports.Spa = exports.SQRT2 = exports.SQRT1_2 = exports.ResultSet = exports.Range = exports.Matrix = exports.LOG2E = exports.LOG10E = exports.LN2 = exports.LN10 = exports.Index = exports.ImmutableDenseMatrix = exports.Fraction = exports.FibonacciHeap = exports.DenseMatrix = exports.Complex = exports.BigNumber = void 0;
7
7
  exports.number = exports.nuclearMagneton = exports.nthRoots = exports.nthRoot = exports.not = exports.norm = exports.neutronMass = exports.multiplyScalar = exports.multiply = exports.multinomial = exports.molarVolume = exports.molarPlanckConstant = exports.molarMassC12 = exports.molarMass = exports.mode = exports.mod = exports.min = exports.median = exports.mean = exports.max = exports.matrixFromRows = exports.matrixFromFunction = exports.matrixFromColumns = exports.matrix = exports.mapSlices = exports.map = exports.magneticFluxQuantum = exports.magneticConstant = exports.mad = exports.lyap = exports.lusolve = exports.lup = exports.lsolveAll = exports.lsolve = exports.loschmidt = exports.log2 = exports.log1p = exports.log10 = exports.log = exports.lgamma = exports.leftShift = exports.lcm = exports.largerEq = exports.larger = exports.kron = exports.klitzing = exports.kldivergence = exports.isZero = exports.isPrime = exports.isPositive = exports.isNumeric = exports.isNegative = exports.isNaN = exports.isInteger = exports.invmod = exports.inverseConductanceQuantum = exports.inv = exports.intersect = exports.index = exports.im = exports.ifft = exports.identity = exports.i = exports.hypot = exports.hex = exports.hasNumericValue = exports.hartreeEnergy = exports.gravity = exports.gravitationConstant = exports.getMatrixDataType = exports.gcd = exports.gasConstant = exports.gamma = exports.freqz = exports.fraction = exports.format = exports.forEach = exports.floor = exports.flatten = exports.fix = exports.firstRadiation = exports.fineStructure = exports.filter = exports.fft = exports.fermiCoupling = exports.faraday = exports.factorial = exports.expm1 = exports.expm = exports.exp = exports.erf = exports.equalText = exports.equalScalar = exports.equal = exports.elementaryCharge = exports.electronMass = exports.electricConstant = exports.eigs = exports.efimovFactor = exports.e = void 0;
8
- exports.xgcd = exports.wienDisplacement = exports.weakMixingAngle = exports.version = exports.variance = exports.vacuumImpedance = exports.usolveAll = exports.usolve = exports.unit = exports.unequal = exports.unaryPlus = exports.unaryMinus = exports.typed = exports.typeOf = exports.transpose = exports.trace = exports.to = exports.thomsonCrossSection = exports.tau = exports.tanh = exports.tan = exports.sylvester = exports.sum = exports.subtractScalar = exports.subtract = exports.subset = exports.string = exports.stirlingS2 = exports.stefanBoltzmann = exports.std = exports.squeeze = exports.square = exports.sqrtm = exports.sqrt = exports.splitUnit = exports.speedOfLight = exports.sparse = exports.sort = exports.solveODE = exports.smallerEq = exports.smaller = exports.slu = exports.size = exports.sinh = exports.sin = exports.sign = exports.setUnion = exports.setSymDifference = exports.setSize = exports.setPowerset = exports.setMultiplicity = exports.setIsSubset = exports.setIntersect = exports.setDistinct = exports.setDifference = exports.setCartesian = exports.secondRadiation = exports.sech = exports.sec = exports.schur = exports.sackurTetrode = exports.rydberg = exports.row = exports.round = exports.rotationMatrix = exports.rotate = exports.rightLogShift = exports.rightArithShift = exports.resize = exports.reshape = exports.replacer = exports.reducedPlanckConstant = exports.re = exports.range = exports.randomInt = exports.random = exports.quantumOfCirculation = exports.quantileSeq = exports.qr = exports.protonMass = exports.prod = exports.print = exports.pow = exports.polynomialRoot = exports.planckTime = exports.planckTemperature = exports.planckMass = exports.planckLength = exports.planckConstant = exports.planckCharge = exports.pinv = exports.pickRandom = exports.pi = exports.phi = exports.permutations = exports.partitionSelect = exports.or = exports.ones = exports.oct = exports.numeric = void 0;
9
- exports.zpk2tf = exports.zeta = exports.zeros = exports.xor = void 0;
8
+ exports.wienDisplacement = exports.weakMixingAngle = exports.version = exports.variance = exports.vacuumImpedance = exports.usolveAll = exports.usolve = exports.unit = exports.unequal = exports.unaryPlus = exports.unaryMinus = exports.typed = exports.typeOf = exports.transpose = exports.trace = exports.toBest = exports.to = exports.thomsonCrossSection = exports.tau = exports.tanh = exports.tan = exports.sylvester = exports.sum = exports.subtractScalar = exports.subtract = exports.subset = exports.string = exports.stirlingS2 = exports.stefanBoltzmann = exports.std = exports.squeeze = exports.square = exports.sqrtm = exports.sqrt = exports.splitUnit = exports.speedOfLight = exports.sparse = exports.sort = exports.solveODE = exports.smallerEq = exports.smaller = exports.slu = exports.size = exports.sinh = exports.sin = exports.sign = exports.setUnion = exports.setSymDifference = exports.setSize = exports.setPowerset = exports.setMultiplicity = exports.setIsSubset = exports.setIntersect = exports.setDistinct = exports.setDifference = exports.setCartesian = exports.secondRadiation = exports.sech = exports.sec = exports.schur = exports.sackurTetrode = exports.rydberg = exports.row = exports.round = exports.rotationMatrix = exports.rotate = exports.rightLogShift = exports.rightArithShift = exports.resize = exports.reshape = exports.replacer = exports.reducedPlanckConstant = exports.re = exports.range = exports.randomInt = exports.random = exports.quantumOfCirculation = exports.quantileSeq = exports.qr = exports.protonMass = exports.prod = exports.print = exports.pow = exports.polynomialRoot = exports.planckTime = exports.planckTemperature = exports.planckMass = exports.planckLength = exports.planckConstant = exports.planckCharge = exports.pinv = exports.pickRandom = exports.pi = exports.phi = exports.permutations = exports.partitionSelect = exports.or = exports.ones = exports.oct = exports.numeric = void 0;
9
+ exports.zpk2tf = exports.zeta = exports.zeros = exports.xor = exports.xgcd = void 0;
10
10
  var _configReadonly = require("./configReadonly.js");
11
11
  var _factoriesAny = require("../factoriesAny.js");
12
12
  /**
@@ -308,6 +308,9 @@ const subtractScalar = exports.subtractScalar = /* #__PURE__ */(0, _factoriesAny
308
308
  const tan = exports.tan = /* #__PURE__ */(0, _factoriesAny.createTan)({
309
309
  typed
310
310
  });
311
+ const toBest = exports.toBest = /* #__PURE__ */(0, _factoriesAny.createToBest)({
312
+ typed
313
+ });
311
314
  const typeOf = exports.typeOf = /* #__PURE__ */(0, _factoriesAny.createTypeOf)({
312
315
  typed
313
316
  });
@@ -1185,7 +1188,8 @@ const Unit = exports.Unit = /* #__PURE__ */(0, _factoriesAny.createUnitClass)({
1185
1188
  number,
1186
1189
  pow,
1187
1190
  round,
1188
- subtractScalar
1191
+ subtractScalar,
1192
+ toBest
1189
1193
  });
1190
1194
  const vacuumImpedance = exports.vacuumImpedance = /* #__PURE__ */(0, _factoriesAny.createVacuumImpedance)({
1191
1195
  BigNumber,
@@ -235,6 +235,7 @@ var _sinh = require("./function/trigonometry/sinh.js");
235
235
  var _tan = require("./function/trigonometry/tan.js");
236
236
  var _tanh = require("./function/trigonometry/tanh.js");
237
237
  var _to = require("./function/units/to.js");
238
+ var _toBest = require("./function/units/toBest.js");
238
239
  var _bin = require("./function/utils/bin.js");
239
240
  var _clone = require("./function/utils/clone.js");
240
241
  var _format = require("./function/utils/format.js");
@@ -718,6 +719,7 @@ const embeddedDocs = exports.embeddedDocs = {
718
719
  tanh: _tanh.tanhDocs,
719
720
  // functions - units
720
721
  to: _to.toDocs,
722
+ toBest: _toBest.toBestDocs,
721
723
  // functions - utils
722
724
  clone: _clone.cloneDocs,
723
725
  format: _format.formatDocs,
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.toBestDocs = void 0;
7
+ const toBestDocs = exports.toBestDocs = {
8
+ name: 'toBest',
9
+ category: 'Units',
10
+ syntax: ['toBest(x)', 'toBest(x, unitList)', 'toBest(x, unitList, options)'],
11
+ description: 'Converts to the most appropriate display unit.',
12
+ examples: ['toBest(unit(5000, "m"))', 'toBest(unit(3500000, "W"))', 'toBest(unit(0.000000123, "A"))', 'toBest(unit(10, "m"), "cm")', 'toBest(unit(10, "m"), "mm,km", {offset: 1.5})'],
13
+ seealso: []
14
+ };
@@ -2031,6 +2031,12 @@ Object.defineProperty(exports, "createTo", {
2031
2031
  return _to.createTo;
2032
2032
  }
2033
2033
  });
2034
+ Object.defineProperty(exports, "createToBest", {
2035
+ enumerable: true,
2036
+ get: function () {
2037
+ return _toBest.createToBest;
2038
+ }
2039
+ });
2034
2040
  Object.defineProperty(exports, "createTrace", {
2035
2041
  enumerable: true,
2036
2042
  get: function () {
@@ -2290,6 +2296,7 @@ var _oct = require("./function/string/oct.js");
2290
2296
  var _hex = require("./function/string/hex.js");
2291
2297
  var _print = require("./function/string/print.js");
2292
2298
  var _to = require("./function/unit/to.js");
2299
+ var _toBest = require("./function/unit/toBest.js");
2293
2300
  var _isPrime = require("./function/utils/isPrime.js");
2294
2301
  var _numeric = require("./function/utils/numeric.js");
2295
2302
  var _divideScalar = require("./function/arithmetic/divideScalar.js");
@@ -58,7 +58,7 @@ const createSign = exports.createSign = /* #__PURE__ */(0, _factory.factory)(nam
58
58
  return x > 0n ? 1n : x < 0n ? -1n : 0n;
59
59
  },
60
60
  Fraction: function (x) {
61
- return new Fraction(x.s);
61
+ return x.n === 0n ? new Fraction(0) : new Fraction(x.s);
62
62
  },
63
63
  // deep map collection, skip zeros since sign(0) = 0
64
64
  'Array | Matrix': typed.referToSelf(self => x => (0, _collection.deepMap)(x, self, true)),
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createToBest = void 0;
7
+ var _factory = require("../../utils/factory.js");
8
+ const name = 'toBest';
9
+ const dependencies = ['typed'];
10
+ const createToBest = exports.createToBest = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
11
+ let {
12
+ typed
13
+ } = _ref;
14
+ /**
15
+ * Converts a unit to the most appropriate display unit.
16
+ * When no preferred units are provided, the function automatically find the best prefix.
17
+ * When preferred units are provided, it converts to
18
+ * the unit that gives a value closest to 1.
19
+ *
20
+ * Syntax:
21
+ *
22
+ * math.toBest(unit)
23
+ * math.toBest(unit, unitList)
24
+ * math.toBest(unit, unitList, options)
25
+ *
26
+ * Where:
27
+ * - `unitList` is an optional array of preferred target units as string or Unit.
28
+ * - `options` is an optional object with options, formed as follows:
29
+ * - `offset`: number | BigNumber
30
+ *
31
+ * Examples:
32
+ *
33
+ * math.unit(0.05, 'm').toBest(['cm', 'mm']) // returns Unit 5 cm
34
+ * math.unit(2 / 3, 'cm').toBest() // returns Unit 0.6666666666666666 cm
35
+ * math.unit(10, 'm').toBest(['mm', 'km'], { offset: 1.5 }) // returns Unit 10000 mm
36
+ *
37
+ * See also:
38
+ *
39
+ * unit, to, format
40
+ *
41
+ * @param {Unit} x The unit to be converted
42
+ * @param {Array<string>} [unitList=[]] Optional array of preferred target units
43
+ * @param {Object} [options] Optional options object
44
+ * @return {Unit} Value converted to the best matching unit
45
+ */
46
+ return typed(name, {
47
+ Unit: x => x.toBest(),
48
+ 'Unit, string': (x, unitList) => x.toBest(unitList.split(',')),
49
+ 'Unit, string, Object': (x, unitList, options) => x.toBest(unitList.split(','), options),
50
+ 'Unit, Array': (x, unitList) => x.toBest(unitList),
51
+ 'Unit, Array, Object': (x, unitList, options) => x.toBest(unitList, options)
52
+ });
53
+ });
package/lib/cjs/header.js CHANGED
@@ -6,8 +6,8 @@
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.5.3
10
- * @date 2025-07-02
9
+ * @version 14.6.0
10
+ * @date 2025-07-25
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2025 Jos de Jong <wjosdejong@gmail.com>
@@ -13,7 +13,7 @@ var _string = require("../../utils/string.js");
13
13
  var _object = require("../../utils/object.js");
14
14
  var _constants = require("../../utils/bignumber/constants.js");
15
15
  const name = 'Unit';
16
- const dependencies = ['?on', 'config', 'addScalar', 'subtractScalar', 'multiplyScalar', 'divideScalar', 'pow', 'abs', 'fix', 'round', 'equal', 'isNumeric', 'format', 'number', 'Complex', 'BigNumber', 'Fraction'];
16
+ const dependencies = ['?on', 'config', 'addScalar', 'subtractScalar', 'multiplyScalar', 'divideScalar', 'pow', 'abs', 'fix', 'round', 'equal', 'isNumeric', 'format', 'toBest', 'number', 'Complex', 'BigNumber', 'Fraction'];
17
17
  const createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
18
18
  let {
19
19
  on,
@@ -29,6 +29,7 @@ const createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fa
29
29
  equal,
30
30
  isNumeric,
31
31
  format,
32
+ toBest,
32
33
  number,
33
34
  Complex,
34
35
  BigNumber,
@@ -1048,6 +1049,54 @@ const createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fa
1048
1049
  return str;
1049
1050
  };
1050
1051
 
1052
+ /**
1053
+ * Get a unit, with optional formatting options.
1054
+ * @memberof Unit
1055
+ * @param {string[] | Unit[]} [units] Array of units strings or valueLess Unit objects in wich choose the best one
1056
+ * @param {Object} [options] Options for parsing the unit. See parseUnit for details.
1057
+ *
1058
+ * @return {Unit} Returns a new Unit with the given value and unit.
1059
+ */
1060
+ Unit.prototype.toBest = function () {
1061
+ let unitList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
1062
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1063
+ if (unitList && !Array.isArray(unitList)) {
1064
+ throw new Error('Invalid unit type. Expected string or Unit.');
1065
+ }
1066
+ const startPrefixes = this.units[0].unit.prefixes;
1067
+ if (unitList && unitList.length > 0) {
1068
+ const unitObjects = unitList.map(u => {
1069
+ let unit = null;
1070
+ if (typeof u === 'string') {
1071
+ unit = Unit.parse(u);
1072
+ if (!unit) {
1073
+ throw new Error('Invalid unit type. Expected compatible string or Unit.');
1074
+ }
1075
+ } else if (!(0, _is.isUnit)(u)) {
1076
+ throw new Error('Invalid unit type. Expected compatible string or Unit.');
1077
+ }
1078
+ if (unit === null) {
1079
+ unit = u.clone();
1080
+ }
1081
+ try {
1082
+ this.to(unit.formatUnits());
1083
+ return unit;
1084
+ } catch (e) {
1085
+ throw new Error('Invalid unit type. Expected compatible string or Unit.');
1086
+ }
1087
+ });
1088
+ const prefixes = unitObjects.map(el => el.units[0].prefix);
1089
+ this.units[0].unit.prefixes = prefixes.reduce((acc, prefix) => {
1090
+ acc[prefix.name] = prefix;
1091
+ return acc;
1092
+ }, {});
1093
+ this.units[0].prefix = prefixes[0];
1094
+ }
1095
+ const result = formatBest(this, options).simp;
1096
+ this.units[0].unit.prefixes = startPrefixes;
1097
+ result.fixPrefix = true;
1098
+ return result;
1099
+ };
1051
1100
  /**
1052
1101
  * Get a string representation of the Unit, with optional formatting options.
1053
1102
  * @memberof Unit
@@ -1058,11 +1107,54 @@ const createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fa
1058
1107
  * @return {string}
1059
1108
  */
1060
1109
  Unit.prototype.format = function (options) {
1110
+ const {
1111
+ simp,
1112
+ valueStr,
1113
+ unitStr
1114
+ } = formatBest(this, options);
1115
+ let str = valueStr;
1116
+ if (simp.value && (0, _is.isComplex)(simp.value)) {
1117
+ str = '(' + str + ')'; // Surround complex values with ( ) to enable better parsing
1118
+ }
1119
+ if (unitStr.length > 0 && str.length > 0) {
1120
+ str += ' ';
1121
+ }
1122
+ str += unitStr;
1123
+ return str;
1124
+ };
1125
+
1126
+ /**
1127
+ * Helper function to normalize a unit for conversion and formatting
1128
+ * @param {Unit} unit The unit to be normalized
1129
+ * @return {Object} Object with normalized unit and value
1130
+ * @private
1131
+ */
1132
+ function formatBest(unit) {
1133
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1061
1134
  // Simplfy the unit list, unless it is valueless or was created directly in the
1062
1135
  // constructor or as the result of to or toSI
1063
- const simp = this.skipAutomaticSimplification || this.value === null ? this.clone() : this.simplify();
1136
+ const simp = unit.skipAutomaticSimplification || unit.value === null ? unit.clone() : unit.simplify();
1064
1137
 
1065
1138
  // Apply some custom logic for handling VA and VAR. The goal is to express the value of the unit as a real value, if possible. Otherwise, use a real-valued unit instead of a complex-valued one.
1139
+ handleVAandVARUnits(simp);
1140
+ // Now apply the best prefix
1141
+ // Units must have only one unit and not have the fixPrefix flag set
1142
+ applyBestPrefixIfNeeded(simp, options.offset);
1143
+ const value = simp._denormalize(simp.value);
1144
+ const valueStr = simp.value !== null ? format(value, options || {}) : '';
1145
+ const unitStr = simp.formatUnits();
1146
+ return {
1147
+ simp,
1148
+ valueStr,
1149
+ unitStr
1150
+ };
1151
+ }
1152
+
1153
+ /**
1154
+ * Helper to handle VA and VAR units
1155
+ * @param {Unit} simp The unit to be normalized
1156
+ */
1157
+ function handleVAandVARUnits(simp) {
1066
1158
  let isImaginary = false;
1067
1159
  if (typeof simp.value !== 'undefined' && simp.value !== null && (0, _is.isComplex)(simp.value)) {
1068
1160
  // TODO: Make this better, for example, use relative magnitude of re and im rather than absolute
@@ -1079,37 +1171,32 @@ const createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fa
1079
1171
  }
1080
1172
  }
1081
1173
  }
1174
+ }
1082
1175
 
1083
- // Now apply the best prefix
1084
- // Units must have only one unit and not have the fixPrefix flag set
1176
+ /**
1177
+ * Helper to apply the best prefix if needed
1178
+ * @param {Unit} simp The unit to be normalized
1179
+ */
1180
+ function applyBestPrefixIfNeeded(simp, offset) {
1085
1181
  if (simp.units.length === 1 && !simp.fixPrefix) {
1086
1182
  // Units must have integer powers, otherwise the prefix will change the
1087
1183
  // outputted value by not-an-integer-power-of-ten
1088
1184
  if (Math.abs(simp.units[0].power - Math.round(simp.units[0].power)) < 1e-14) {
1089
1185
  // Apply the best prefix
1090
- simp.units[0].prefix = simp._bestPrefix();
1186
+ simp.units[0].prefix = simp._bestPrefix(offset);
1091
1187
  }
1092
1188
  }
1093
- const value = simp._denormalize(simp.value);
1094
- let str = simp.value !== null ? format(value, options || {}) : '';
1095
- const unitStr = simp.formatUnits();
1096
- if (simp.value && (0, _is.isComplex)(simp.value)) {
1097
- str = '(' + str + ')'; // Surround complex values with ( ) to enable better parsing
1098
- }
1099
- if (unitStr.length > 0 && str.length > 0) {
1100
- str += ' ';
1101
- }
1102
- str += unitStr;
1103
- return str;
1104
- };
1189
+ }
1105
1190
 
1106
1191
  /**
1107
1192
  * Calculate the best prefix using current value.
1108
1193
  * @memberof Unit
1109
1194
  * @returns {Object} prefix
1195
+ * @param {number} [offset] Optional offset for the best prefix calculation (default 1.2)
1110
1196
  * @private
1111
1197
  */
1112
1198
  Unit.prototype._bestPrefix = function () {
1199
+ let offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1.2;
1113
1200
  if (this.units.length !== 1) {
1114
1201
  throw new Error('Can only compute the best prefix for single units with integer powers, like kg, s^2, N^-1, and so forth!');
1115
1202
  }
@@ -1132,7 +1219,7 @@ const createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fa
1132
1219
  return bestPrefix;
1133
1220
  }
1134
1221
  const power = this.units[0].power;
1135
- let bestDiff = Math.log(absValue / Math.pow(bestPrefix.value * absUnitValue, power)) / Math.LN10 - 1.2;
1222
+ let bestDiff = Math.log(absValue / Math.pow(bestPrefix.value * absUnitValue, power)) / Math.LN10 - offset;
1136
1223
  if (bestDiff > -2.200001 && bestDiff < 1.800001) return bestPrefix; // Allow the original prefix
1137
1224
  bestDiff = Math.abs(bestDiff);
1138
1225
  const prefixes = this.units[0].unit.prefixes;
@@ -1140,7 +1227,7 @@ const createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fa
1140
1227
  if ((0, _object.hasOwnProperty)(prefixes, p)) {
1141
1228
  const prefix = prefixes[p];
1142
1229
  if (prefix.scientific) {
1143
- const diff = Math.abs(Math.log(absValue / Math.pow(prefix.value * absUnitValue, power)) / Math.LN10 - 1.2);
1230
+ const diff = Math.abs(Math.log(absValue / Math.pow(prefix.value * absUnitValue, power)) / Math.LN10 - offset);
1144
1231
  if (diff < bestDiff || diff === bestDiff && prefix.name.length < bestPrefix.name.length) {
1145
1232
  // choose the prefix with the smallest diff, or if equal, choose the one
1146
1233
  // with the shortest name (can happen with SHORTLONG for example)
@@ -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.5.3';
7
+ const version = exports.version = '14.6.0';
8
8
  // Note: This file is automatically generated when building math.js.
9
9
  // Changes made in this file will be overwritten.
@@ -0,0 +1,10 @@
1
+ /**
2
+ * THIS FILE IS AUTO-GENERATED
3
+ * DON'T MAKE CHANGES HERE
4
+ */
5
+ import { typedDependencies } from './dependenciesTyped.generated.js';
6
+ import { createToBest } from '../../factoriesAny.js';
7
+ export var toBestDependencies = {
8
+ typedDependencies,
9
+ createToBest
10
+ };
@@ -17,6 +17,7 @@ import { numberDependencies } from './dependenciesNumber.generated.js';
17
17
  import { powDependencies } from './dependenciesPow.generated.js';
18
18
  import { roundDependencies } from './dependenciesRound.generated.js';
19
19
  import { subtractScalarDependencies } from './dependenciesSubtractScalar.generated.js';
20
+ import { toBestDependencies } from './dependenciesToBest.generated.js';
20
21
  import { createUnitClass } from '../../factoriesAny.js';
21
22
  export var UnitDependencies = {
22
23
  BigNumberDependencies,
@@ -34,5 +35,6 @@ export var UnitDependencies = {
34
35
  powDependencies,
35
36
  roundDependencies,
36
37
  subtractScalarDependencies,
38
+ toBestDependencies,
37
39
  createUnitClass
38
40
  };
@@ -340,6 +340,7 @@ export { tanhDependencies } from './dependenciesAny/dependenciesTanh.generated.j
340
340
  export { tauDependencies } from './dependenciesAny/dependenciesTau.generated.js';
341
341
  export { thomsonCrossSectionDependencies } from './dependenciesAny/dependenciesThomsonCrossSection.generated.js';
342
342
  export { toDependencies } from './dependenciesAny/dependenciesTo.generated.js';
343
+ export { toBestDependencies } from './dependenciesAny/dependenciesToBest.generated.js';
343
344
  export { traceDependencies } from './dependenciesAny/dependenciesTrace.generated.js';
344
345
  export { transposeDependencies } from './dependenciesAny/dependenciesTranspose.generated.js';
345
346
  export { trueDependencies } from './dependenciesAny/dependenciesTrue.generated.js';
@@ -7,7 +7,7 @@ import { config } from './configReadonly.js';
7
7
  import { createNode, createObjectNode, createOperatorNode, createParenthesisNode, createRelationalNode, createArrayNode, createBlockNode, createConditionalNode, createConstantNode, createRangeNode, createReviver, createChainClass, createFunctionAssignmentNode, createChain, createAccessorNode, createAssignmentNode, createIndexNode, createSymbolNode, createFunctionNode, createParse, createResolve, createSimplifyConstant, createCompile, createSimplifyCore, createEvaluate, createHelpClass, createParserClass, createSimplify, createSymbolicEqual, createLeafCount, createParser, createRationalize, createDerivative, createHelp, createMapSlicesTransform, createFilterTransform, createForEachTransform, createMapTransform, createOrTransform, createAndTransform, createConcatTransform, createIndexTransform, createPrintTransform, createSumTransform, createBitAndTransform, createMinTransform, createSubsetTransform, createBitOrTransform, createCumSumTransform, createDiffTransform, createMaxTransform, createRangeTransform, createRowTransform, createColumnTransform, createMeanTransform, createQuantileSeqTransform, createVarianceTransform, createStdTransform } from '../factoriesAny.js';
8
8
  import { BigNumber, Complex, e, _false, fineStructure, Fraction, i, _Infinity, LN10, LOG10E, Matrix, _NaN, _null, phi, Range, ResultSet, SQRT1_2,
9
9
  // eslint-disable-line camelcase
10
- sackurTetrode, tau, _true, version, DenseMatrix, efimovFactor, LN2, pi, replacer, SQRT2, typed, weakMixingAngle, abs, acos, acot, acsc, addScalar, arg, asech, asinh, atan, atanh, bigint, bitNot, boolean, clone, combinations, complex, conj, cos, cot, csc, cube, equalScalar, erf, exp, expm1, filter, flatten, forEach, format, getMatrixDataType, hex, im, isInteger, isNegative, isPositive, isZero, LOG2E, lgamma, log10, log2, map, multiplyScalar, not, number, oct, pickRandom, print, random, re, sec, sign, sin, SparseMatrix, splitUnit, square, string, subtractScalar, tan, typeOf, acosh, acsch, asec, bignumber, combinationsWithRep, cosh, csch, isNaN, isPrime, mapSlices, matrix, matrixFromFunction, ones, randomInt, reshape, sech, sinh, sparse, sqrt, squeeze, tanh, transpose, xgcd, zeros, acoth, asin, bin, concat, coth, ctranspose, diag, dotMultiply, equal, fraction, identity, isNumeric, kron, largerEq, leftShift, mode, nthRoot, numeric, prod, resize, rightArithShift, round, size, smaller, to, unaryMinus, unequal, xor, add, atan2, bitAnd, bitOr, bitXor, cbrt, compare, compareText, count, deepEqual, divideScalar, dotDivide, equalText, floor, gcd, hasNumericValue, hypot, ImmutableDenseMatrix, Index, larger, log, lsolve, matrixFromColumns, max, min, mod, nthRoots, or, partitionSelect, qr, rightLogShift, smallerEq, subset, subtract, trace, usolve, catalan, compareNatural, composition, diff, distance, dot, FibonacciHeap, index, invmod, lcm, log1p, lsolveAll, matrixFromRows, multiply, range, row, setCartesian, setDistinct, setIsSubset, setPowerset, slu, sort, unaryPlus, usolveAll, zpk2tf, and, ceil, column, cross, det, fix, inv, pinv, pow, setDifference, setMultiplicity, setSymDifference, Spa, sqrtm, sum, Unit, vacuumImpedance, wienDisplacement, atomicMass, bohrMagneton, boltzmann, conductanceQuantum, coulomb, createUnit, deuteronMass, dotPow, electricConstant, elementaryCharge, expm, faraday, fft, gamma, gravitationConstant, hartreeEnergy, ifft, inverseConductanceQuantum, klitzing, loschmidt, magneticConstant, molarMass, molarPlanckConstant, neutronMass, nuclearMagneton, planckCharge, planckLength, planckTemperature, protonMass, quantumOfCirculation, reducedPlanckConstant, rydberg, secondRadiation, setSize, speedOfLight, stefanBoltzmann, thomsonCrossSection, avogadro, bohrRadius, coulombConstant, divide, electronMass, factorial, firstRadiation, gravity, intersect, lup, magneticFluxQuantum, molarMassC12, multinomial, permutations, planckMass, polynomialRoot, setIntersect, solveODE, stirlingS2, unit, bellNumbers, cumsum, eigs, fermiCoupling, gasConstant, kldivergence, lusolve, mean, molarVolume, planckConstant, quantileSeq, setUnion, variance, classicalElectronRadius, median, corr, freqz, mad, std, zeta, norm, rotationMatrix, planckTime, schur, rotate, sylvester, lyap } from './pureFunctionsAny.generated.js';
10
+ sackurTetrode, tau, _true, version, DenseMatrix, efimovFactor, LN2, pi, replacer, SQRT2, typed, weakMixingAngle, abs, acos, acot, acsc, addScalar, arg, asech, asinh, atan, atanh, bigint, bitNot, boolean, clone, combinations, complex, conj, cos, cot, csc, cube, equalScalar, erf, exp, expm1, filter, flatten, forEach, format, getMatrixDataType, hex, im, isInteger, isNegative, isPositive, isZero, LOG2E, lgamma, log10, log2, map, multiplyScalar, not, number, oct, pickRandom, print, random, re, sec, sign, sin, SparseMatrix, splitUnit, square, string, subtractScalar, tan, toBest, typeOf, acosh, acsch, asec, bignumber, combinationsWithRep, cosh, csch, isNaN, isPrime, mapSlices, matrix, matrixFromFunction, ones, randomInt, reshape, sech, sinh, sparse, sqrt, squeeze, tanh, transpose, xgcd, zeros, acoth, asin, bin, concat, coth, ctranspose, diag, dotMultiply, equal, fraction, identity, isNumeric, kron, largerEq, leftShift, mode, nthRoot, numeric, prod, resize, rightArithShift, round, size, smaller, to, unaryMinus, unequal, xor, add, atan2, bitAnd, bitOr, bitXor, cbrt, compare, compareText, count, deepEqual, divideScalar, dotDivide, equalText, floor, gcd, hasNumericValue, hypot, ImmutableDenseMatrix, Index, larger, log, lsolve, matrixFromColumns, max, min, mod, nthRoots, or, partitionSelect, qr, rightLogShift, smallerEq, subset, subtract, trace, usolve, catalan, compareNatural, composition, diff, distance, dot, FibonacciHeap, index, invmod, lcm, log1p, lsolveAll, matrixFromRows, multiply, range, row, setCartesian, setDistinct, setIsSubset, setPowerset, slu, sort, unaryPlus, usolveAll, zpk2tf, and, ceil, column, cross, det, fix, inv, pinv, pow, setDifference, setMultiplicity, setSymDifference, Spa, sqrtm, sum, Unit, vacuumImpedance, wienDisplacement, atomicMass, bohrMagneton, boltzmann, conductanceQuantum, coulomb, createUnit, deuteronMass, dotPow, electricConstant, elementaryCharge, expm, faraday, fft, gamma, gravitationConstant, hartreeEnergy, ifft, inverseConductanceQuantum, klitzing, loschmidt, magneticConstant, molarMass, molarPlanckConstant, neutronMass, nuclearMagneton, planckCharge, planckLength, planckTemperature, protonMass, quantumOfCirculation, reducedPlanckConstant, rydberg, secondRadiation, setSize, speedOfLight, stefanBoltzmann, thomsonCrossSection, avogadro, bohrRadius, coulombConstant, divide, electronMass, factorial, firstRadiation, gravity, intersect, lup, magneticFluxQuantum, molarMassC12, multinomial, permutations, planckMass, polynomialRoot, setIntersect, solveODE, stirlingS2, unit, bellNumbers, cumsum, eigs, fermiCoupling, gasConstant, kldivergence, lusolve, mean, molarVolume, planckConstant, quantileSeq, setUnion, variance, classicalElectronRadius, median, corr, freqz, mad, std, zeta, norm, rotationMatrix, planckTime, schur, rotate, sylvester, lyap } from './pureFunctionsAny.generated.js';
11
11
  var math = {}; // NOT pure!
12
12
  var mathWithTransform = {}; // NOT pure!
13
13
  var classes = {}; // NOT pure!
@@ -322,6 +322,7 @@ _extends(math, {
322
322
  string,
323
323
  subtractScalar,
324
324
  tan,
325
+ toBest,
325
326
  typeOf,
326
327
  acosh,
327
328
  acsch,
@@ -5,7 +5,7 @@
5
5
  import { config } from './configReadonly.js';
6
6
  import { createBigNumberClass, createComplexClass, createE, createFalse, createFineStructure, createFractionClass, createI, createInfinity, createLN10, createLOG10E, createMatrixClass, createNaN, createNull, createPhi, createRangeClass, createResultSet, createSQRT1_2,
7
7
  // eslint-disable-line camelcase
8
- createSackurTetrode, createTau, createTrue, createVersion, createDenseMatrixClass, createEfimovFactor, createLN2, createPi, createReplacer, createSQRT2, createTyped, createWeakMixingAngle, createAbs, createAcos, createAcot, createAcsc, createAddScalar, createArg, createAsech, createAsinh, createAtan, createAtanh, createBigint, createBitNot, createBoolean, createClone, createCombinations, createComplex, createConj, createCos, createCot, createCsc, createCube, createEqualScalar, createErf, createExp, createExpm1, createFilter, createFlatten, createForEach, createFormat, createGetMatrixDataType, createHex, createIm, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLgamma, createLog10, createLog2, createMap, createMultiplyScalar, createNot, createNumber, createOct, createPickRandom, createPrint, createRandom, createRe, createSec, createSign, createSin, createSparseMatrixClass, createSplitUnit, createSquare, createString, createSubtractScalar, createTan, createTypeOf, createAcosh, createAcsch, createAsec, createBignumber, createCombinationsWithRep, createCosh, createCsch, createIsNaN, createIsPrime, createMapSlices, createMatrix, createMatrixFromFunction, createOnes, createRandomInt, createReshape, createSech, createSinh, createSparse, createSqrt, createSqueeze, createTanh, createTranspose, createXgcd, createZeros, createAcoth, createAsin, createBin, createConcat, createCoth, createCtranspose, createDiag, createDotMultiply, createEqual, createFraction, createIdentity, createIsNumeric, createKron, createLargerEq, createLeftShift, createMode, createNthRoot, createNumeric, createProd, createResize, createRightArithShift, createRound, createSize, createSmaller, createTo, createUnaryMinus, createUnequal, createXor, createAdd, createAtan2, createBitAnd, createBitOr, createBitXor, createCbrt, createCompare, createCompareText, createCount, createDeepEqual, createDivideScalar, createDotDivide, createEqualText, createFloor, createGcd, createHasNumericValue, createHypot, createImmutableDenseMatrixClass, createIndexClass, createLarger, createLog, createLsolve, createMatrixFromColumns, createMax, createMin, createMod, createNthRoots, createOr, createPartitionSelect, createQr, createRightLogShift, createSmallerEq, createSubset, createSubtract, createTrace, createUsolve, createCatalan, createCompareNatural, createComposition, createDiff, createDistance, createDot, createFibonacciHeapClass, createIndex, createInvmod, createLcm, createLog1p, createLsolveAll, createMatrixFromRows, createMultiply, createRange, createRow, createSetCartesian, createSetDistinct, createSetIsSubset, createSetPowerset, createSlu, createSort, createUnaryPlus, createUsolveAll, createZpk2tf, createAnd, createCeil, createColumn, createCross, createDet, createFix, createInv, createPinv, createPow, createSetDifference, createSetMultiplicity, createSetSymDifference, createSpaClass, createSqrtm, createSum, createUnitClass, createVacuumImpedance, createWienDisplacement, createAtomicMass, createBohrMagneton, createBoltzmann, createConductanceQuantum, createCoulomb, createCreateUnit, createDeuteronMass, createDotPow, createElectricConstant, createElementaryCharge, createExpm, createFaraday, createFft, createGamma, createGravitationConstant, createHartreeEnergy, createIfft, createInverseConductanceQuantum, createKlitzing, createLoschmidt, createMagneticConstant, createMolarMass, createMolarPlanckConstant, createNeutronMass, createNuclearMagneton, createPlanckCharge, createPlanckLength, createPlanckTemperature, createProtonMass, createQuantumOfCirculation, createReducedPlanckConstant, createRydberg, createSecondRadiation, createSetSize, createSpeedOfLight, createStefanBoltzmann, createThomsonCrossSection, createAvogadro, createBohrRadius, createCoulombConstant, createDivide, createElectronMass, createFactorial, createFirstRadiation, createGravity, createIntersect, createLup, createMagneticFluxQuantum, createMolarMassC12, createMultinomial, createPermutations, createPlanckMass, createPolynomialRoot, createSetIntersect, createSolveODE, createStirlingS2, createUnitFunction, createBellNumbers, createCumSum, createEigs, createFermiCoupling, createGasConstant, createKldivergence, createLusolve, createMean, createMolarVolume, createPlanckConstant, createQuantileSeq, createSetUnion, createVariance, createClassicalElectronRadius, createMedian, createCorr, createFreqz, createMad, createStd, createZeta, createNorm, createRotationMatrix, createPlanckTime, createSchur, createRotate, createSylvester, createLyap } from '../factoriesAny.js';
8
+ createSackurTetrode, createTau, createTrue, createVersion, createDenseMatrixClass, createEfimovFactor, createLN2, createPi, createReplacer, createSQRT2, createTyped, createWeakMixingAngle, createAbs, createAcos, createAcot, createAcsc, createAddScalar, createArg, createAsech, createAsinh, createAtan, createAtanh, createBigint, createBitNot, createBoolean, createClone, createCombinations, createComplex, createConj, createCos, createCot, createCsc, createCube, createEqualScalar, createErf, createExp, createExpm1, createFilter, createFlatten, createForEach, createFormat, createGetMatrixDataType, createHex, createIm, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLgamma, createLog10, createLog2, createMap, createMultiplyScalar, createNot, createNumber, createOct, createPickRandom, createPrint, createRandom, createRe, createSec, createSign, createSin, createSparseMatrixClass, createSplitUnit, createSquare, createString, createSubtractScalar, createTan, createToBest, createTypeOf, createAcosh, createAcsch, createAsec, createBignumber, createCombinationsWithRep, createCosh, createCsch, createIsNaN, createIsPrime, createMapSlices, createMatrix, createMatrixFromFunction, createOnes, createRandomInt, createReshape, createSech, createSinh, createSparse, createSqrt, createSqueeze, createTanh, createTranspose, createXgcd, createZeros, createAcoth, createAsin, createBin, createConcat, createCoth, createCtranspose, createDiag, createDotMultiply, createEqual, createFraction, createIdentity, createIsNumeric, createKron, createLargerEq, createLeftShift, createMode, createNthRoot, createNumeric, createProd, createResize, createRightArithShift, createRound, createSize, createSmaller, createTo, createUnaryMinus, createUnequal, createXor, createAdd, createAtan2, createBitAnd, createBitOr, createBitXor, createCbrt, createCompare, createCompareText, createCount, createDeepEqual, createDivideScalar, createDotDivide, createEqualText, createFloor, createGcd, createHasNumericValue, createHypot, createImmutableDenseMatrixClass, createIndexClass, createLarger, createLog, createLsolve, createMatrixFromColumns, createMax, createMin, createMod, createNthRoots, createOr, createPartitionSelect, createQr, createRightLogShift, createSmallerEq, createSubset, createSubtract, createTrace, createUsolve, createCatalan, createCompareNatural, createComposition, createDiff, createDistance, createDot, createFibonacciHeapClass, createIndex, createInvmod, createLcm, createLog1p, createLsolveAll, createMatrixFromRows, createMultiply, createRange, createRow, createSetCartesian, createSetDistinct, createSetIsSubset, createSetPowerset, createSlu, createSort, createUnaryPlus, createUsolveAll, createZpk2tf, createAnd, createCeil, createColumn, createCross, createDet, createFix, createInv, createPinv, createPow, createSetDifference, createSetMultiplicity, createSetSymDifference, createSpaClass, createSqrtm, createSum, createUnitClass, createVacuumImpedance, createWienDisplacement, createAtomicMass, createBohrMagneton, createBoltzmann, createConductanceQuantum, createCoulomb, createCreateUnit, createDeuteronMass, createDotPow, createElectricConstant, createElementaryCharge, createExpm, createFaraday, createFft, createGamma, createGravitationConstant, createHartreeEnergy, createIfft, createInverseConductanceQuantum, createKlitzing, createLoschmidt, createMagneticConstant, createMolarMass, createMolarPlanckConstant, createNeutronMass, createNuclearMagneton, createPlanckCharge, createPlanckLength, createPlanckTemperature, createProtonMass, createQuantumOfCirculation, createReducedPlanckConstant, createRydberg, createSecondRadiation, createSetSize, createSpeedOfLight, createStefanBoltzmann, createThomsonCrossSection, createAvogadro, createBohrRadius, createCoulombConstant, createDivide, createElectronMass, createFactorial, createFirstRadiation, createGravity, createIntersect, createLup, createMagneticFluxQuantum, createMolarMassC12, createMultinomial, createPermutations, createPlanckMass, createPolynomialRoot, createSetIntersect, createSolveODE, createStirlingS2, createUnitFunction, createBellNumbers, createCumSum, createEigs, createFermiCoupling, createGasConstant, createKldivergence, createLusolve, createMean, createMolarVolume, createPlanckConstant, createQuantileSeq, createSetUnion, createVariance, createClassicalElectronRadius, createMedian, createCorr, createFreqz, createMad, createStd, createZeta, createNorm, createRotationMatrix, createPlanckTime, createSchur, createRotate, createSylvester, createLyap } from '../factoriesAny.js';
9
9
  export var BigNumber = /* #__PURE__ */createBigNumberClass({
10
10
  config
11
11
  });
@@ -300,6 +300,9 @@ export var subtractScalar = /* #__PURE__ */createSubtractScalar({
300
300
  export var tan = /* #__PURE__ */createTan({
301
301
  typed
302
302
  });
303
+ export var toBest = /* #__PURE__ */createToBest({
304
+ typed
305
+ });
303
306
  export var typeOf = /* #__PURE__ */createTypeOf({
304
307
  typed
305
308
  });
@@ -1177,7 +1180,8 @@ export var Unit = /* #__PURE__ */createUnitClass({
1177
1180
  number,
1178
1181
  pow,
1179
1182
  round,
1180
- subtractScalar
1183
+ subtractScalar,
1184
+ toBest
1181
1185
  });
1182
1186
  export var vacuumImpedance = /* #__PURE__ */createVacuumImpedance({
1183
1187
  BigNumber,
@@ -229,6 +229,7 @@ import { sinhDocs } from './function/trigonometry/sinh.js';
229
229
  import { tanDocs } from './function/trigonometry/tan.js';
230
230
  import { tanhDocs } from './function/trigonometry/tanh.js';
231
231
  import { toDocs } from './function/units/to.js';
232
+ import { toBestDocs } from './function/units/toBest.js';
232
233
  import { binDocs } from './function/utils/bin.js';
233
234
  import { cloneDocs } from './function/utils/clone.js';
234
235
  import { formatDocs } from './function/utils/format.js';
@@ -712,6 +713,7 @@ export var embeddedDocs = {
712
713
  tanh: tanhDocs,
713
714
  // functions - units
714
715
  to: toDocs,
716
+ toBest: toBestDocs,
715
717
  // functions - utils
716
718
  clone: cloneDocs,
717
719
  format: formatDocs,
@@ -0,0 +1,8 @@
1
+ export var toBestDocs = {
2
+ name: 'toBest',
3
+ category: 'Units',
4
+ syntax: ['toBest(x)', 'toBest(x, unitList)', 'toBest(x, unitList, options)'],
5
+ description: 'Converts to the most appropriate display unit.',
6
+ examples: ['toBest(unit(5000, "m"))', 'toBest(unit(3500000, "W"))', 'toBest(unit(0.000000123, "A"))', 'toBest(unit(10, "m"), "cm")', 'toBest(unit(10, "m"), "mm,km", {offset: 1.5})'],
7
+ seealso: []
8
+ };
@@ -107,6 +107,7 @@ export { createOct } from './function/string/oct.js';
107
107
  export { createHex } from './function/string/hex.js';
108
108
  export { createPrint } from './function/string/print.js';
109
109
  export { createTo } from './function/unit/to.js';
110
+ export { createToBest } from './function/unit/toBest.js';
110
111
  export { createIsPrime } from './function/utils/isPrime.js';
111
112
  export { createNumeric } from './function/utils/numeric.js';
112
113
  export { createDivideScalar } from './function/arithmetic/divideScalar.js';
@@ -52,7 +52,7 @@ export var createSign = /* #__PURE__ */factory(name, dependencies, _ref => {
52
52
  return x > 0n ? 1n : x < 0n ? -1n : 0n;
53
53
  },
54
54
  Fraction: function Fraction(x) {
55
- return new _Fraction(x.s);
55
+ return x.n === 0n ? new _Fraction(0) : new _Fraction(x.s);
56
56
  },
57
57
  // deep map collection, skip zeros since sign(0) = 0
58
58
  'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self, true)),