mathjs 7.2.0 → 7.5.1

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 (159) hide show
  1. package/HISTORY.md +34 -0
  2. package/dist/math.js +3421 -2476
  3. package/dist/math.min.js +5 -5
  4. package/dist/math.min.map +1 -1
  5. package/docs/expressions/syntax.md +30 -4
  6. package/docs/reference/functions/bin.md +38 -0
  7. package/docs/reference/functions/ceil.md +10 -1
  8. package/docs/reference/functions/fix.md +10 -2
  9. package/docs/reference/functions/floor.md +12 -3
  10. package/docs/reference/functions/hex.md +38 -0
  11. package/docs/reference/functions/lsolve.md +2 -1
  12. package/docs/reference/functions/lsolveAll.md +45 -0
  13. package/docs/reference/functions/oct.md +38 -0
  14. package/docs/reference/functions/rotationMatrix.md +51 -0
  15. package/docs/reference/functions/round.md +6 -2
  16. package/docs/reference/functions/usolve.md +2 -1
  17. package/docs/reference/functions/usolveAll.md +45 -0
  18. package/docs/reference/functions.md +8 -2
  19. package/es/entry/dependenciesAny/dependenciesBin.generated.js +10 -0
  20. package/es/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
  21. package/es/entry/dependenciesAny/dependenciesFix.generated.js +2 -0
  22. package/es/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
  23. package/es/entry/dependenciesAny/dependenciesHex.generated.js +10 -0
  24. package/es/entry/dependenciesAny/dependenciesLsolveAll.generated.js +22 -0
  25. package/es/entry/dependenciesAny/dependenciesOct.generated.js +10 -0
  26. package/es/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +30 -0
  27. package/es/entry/dependenciesAny/dependenciesUsolveAll.generated.js +22 -0
  28. package/es/entry/dependenciesAny.generated.js +6 -0
  29. package/es/entry/impureFunctionsAny.generated.js +63 -57
  30. package/es/entry/pureFunctionsAny.generated.js +323 -277
  31. package/es/expression/embeddedDocs/embeddedDocs.js +12 -0
  32. package/es/expression/embeddedDocs/function/algebra/lsolve.js +2 -2
  33. package/es/expression/embeddedDocs/function/algebra/lsolveAll.js +8 -0
  34. package/es/expression/embeddedDocs/function/algebra/usolve.js +2 -2
  35. package/es/expression/embeddedDocs/function/algebra/usolveAll.js +8 -0
  36. package/es/expression/embeddedDocs/function/matrix/rotationMatrix.js +8 -0
  37. package/es/expression/embeddedDocs/function/utils/bin.js +8 -0
  38. package/es/expression/embeddedDocs/function/utils/hex.js +8 -0
  39. package/es/expression/embeddedDocs/function/utils/oct.js +8 -0
  40. package/es/expression/parse.js +28 -1
  41. package/es/factoriesAny.js +6 -0
  42. package/es/function/algebra/solver/lsolve.js +42 -69
  43. package/es/function/algebra/solver/lsolveAll.js +213 -0
  44. package/es/function/algebra/solver/lusolve.js +12 -27
  45. package/es/function/algebra/solver/usolve.js +41 -64
  46. package/es/function/algebra/solver/usolveAll.js +213 -0
  47. package/es/function/algebra/solver/utils/solveValidation.js +66 -107
  48. package/es/function/arithmetic/ceil.js +88 -4
  49. package/es/function/arithmetic/fix.js +43 -6
  50. package/es/function/arithmetic/floor.js +90 -6
  51. package/es/function/arithmetic/mod.js +10 -1
  52. package/es/function/arithmetic/round.js +6 -2
  53. package/es/function/matrix/rotationMatrix.js +175 -0
  54. package/es/function/matrix/sqrtm.js +4 -0
  55. package/es/function/probability/pickRandom.js +2 -6
  56. package/es/function/statistics/variance.js +4 -4
  57. package/es/function/string/baseUtils.js +36 -0
  58. package/es/function/string/bin.js +23 -0
  59. package/es/function/string/hex.js +23 -0
  60. package/es/function/string/oct.js +23 -0
  61. package/es/type/bignumber/BigNumber.js +4 -1
  62. package/es/type/number.js +10 -0
  63. package/es/utils/object.js +3 -1
  64. package/es/version.js +1 -1
  65. package/examples/advanced/web_server/math_worker.js +1 -1
  66. package/lib/entry/dependenciesAny/dependenciesBin.generated.js +20 -0
  67. package/lib/entry/dependenciesAny/dependenciesCeil.generated.js +6 -0
  68. package/lib/entry/dependenciesAny/dependenciesFix.generated.js +3 -0
  69. package/lib/entry/dependenciesAny/dependenciesFloor.generated.js +6 -0
  70. package/lib/entry/dependenciesAny/dependenciesHex.generated.js +20 -0
  71. package/lib/entry/dependenciesAny/dependenciesLsolveAll.generated.js +38 -0
  72. package/lib/entry/dependenciesAny/dependenciesOct.generated.js +20 -0
  73. package/lib/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +50 -0
  74. package/lib/entry/dependenciesAny/dependenciesUsolveAll.generated.js +38 -0
  75. package/lib/entry/dependenciesAny.generated.js +48 -0
  76. package/lib/entry/impureFunctionsAny.generated.js +65 -59
  77. package/lib/entry/pureFunctionsAny.generated.js +373 -321
  78. package/lib/expression/embeddedDocs/embeddedDocs.js +18 -0
  79. package/lib/expression/embeddedDocs/function/algebra/lsolve.js +2 -2
  80. package/lib/expression/embeddedDocs/function/algebra/lsolveAll.js +15 -0
  81. package/lib/expression/embeddedDocs/function/algebra/usolve.js +2 -2
  82. package/lib/expression/embeddedDocs/function/algebra/usolveAll.js +15 -0
  83. package/lib/expression/embeddedDocs/function/matrix/rotationMatrix.js +15 -0
  84. package/lib/expression/embeddedDocs/function/utils/bin.js +15 -0
  85. package/lib/expression/embeddedDocs/function/utils/hex.js +15 -0
  86. package/lib/expression/embeddedDocs/function/utils/oct.js +15 -0
  87. package/lib/expression/parse.js +28 -1
  88. package/lib/factoriesAny.js +48 -0
  89. package/lib/function/algebra/solver/lsolve.js +42 -69
  90. package/lib/function/algebra/solver/lsolveAll.js +223 -0
  91. package/lib/function/algebra/solver/lusolve.js +12 -27
  92. package/lib/function/algebra/solver/usolve.js +41 -64
  93. package/lib/function/algebra/solver/usolveAll.js +223 -0
  94. package/lib/function/algebra/solver/utils/solveValidation.js +65 -106
  95. package/lib/function/arithmetic/ceil.js +91 -4
  96. package/lib/function/arithmetic/fix.js +44 -6
  97. package/lib/function/arithmetic/floor.js +93 -6
  98. package/lib/function/arithmetic/mod.js +10 -1
  99. package/lib/function/arithmetic/round.js +6 -2
  100. package/lib/function/matrix/rotationMatrix.js +185 -0
  101. package/lib/function/matrix/sqrtm.js +4 -0
  102. package/lib/function/probability/pickRandom.js +3 -7
  103. package/lib/function/statistics/variance.js +4 -4
  104. package/lib/function/string/baseUtils.js +45 -0
  105. package/lib/function/string/bin.js +31 -0
  106. package/lib/function/string/hex.js +31 -0
  107. package/lib/function/string/oct.js +31 -0
  108. package/lib/header.js +2 -2
  109. package/lib/type/bignumber/BigNumber.js +3 -1
  110. package/lib/type/number.js +10 -0
  111. package/lib/utils/object.js +3 -1
  112. package/lib/version.js +1 -1
  113. package/package.json +12 -12
  114. package/src/entry/dependenciesAny/dependenciesBin.generated.js +11 -0
  115. package/src/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
  116. package/src/entry/dependenciesAny/dependenciesFix.generated.js +2 -0
  117. package/src/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
  118. package/src/entry/dependenciesAny/dependenciesHex.generated.js +11 -0
  119. package/src/entry/dependenciesAny/dependenciesLsolveAll.generated.js +23 -0
  120. package/src/entry/dependenciesAny/dependenciesOct.generated.js +11 -0
  121. package/src/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +31 -0
  122. package/src/entry/dependenciesAny/dependenciesUsolveAll.generated.js +23 -0
  123. package/src/entry/dependenciesAny.generated.js +6 -0
  124. package/src/entry/impureFunctionsAny.generated.js +104 -92
  125. package/src/entry/pureFunctionsAny.generated.js +94 -82
  126. package/src/expression/embeddedDocs/embeddedDocs.js +12 -0
  127. package/src/expression/embeddedDocs/function/algebra/lsolve.js +2 -2
  128. package/src/expression/embeddedDocs/function/algebra/lsolveAll.js +17 -0
  129. package/src/expression/embeddedDocs/function/algebra/usolve.js +2 -2
  130. package/src/expression/embeddedDocs/function/algebra/usolveAll.js +15 -0
  131. package/src/expression/embeddedDocs/function/matrix/rotationMatrix.js +19 -0
  132. package/src/expression/embeddedDocs/function/utils/bin.js +12 -0
  133. package/src/expression/embeddedDocs/function/utils/hex.js +12 -0
  134. package/src/expression/embeddedDocs/function/utils/oct.js +12 -0
  135. package/src/expression/parse.js +25 -0
  136. package/src/factoriesAny.js +6 -0
  137. package/src/function/algebra/solver/lsolve.js +52 -58
  138. package/src/function/algebra/solver/lsolveAll.js +197 -0
  139. package/src/function/algebra/solver/lusolve.js +9 -19
  140. package/src/function/algebra/solver/usolve.js +52 -55
  141. package/src/function/algebra/solver/usolveAll.js +199 -0
  142. package/src/function/algebra/solver/utils/solveValidation.js +78 -86
  143. package/src/function/arithmetic/ceil.js +63 -3
  144. package/src/function/arithmetic/fix.js +45 -6
  145. package/src/function/arithmetic/floor.js +65 -5
  146. package/src/function/arithmetic/mod.js +8 -1
  147. package/src/function/arithmetic/round.js +6 -2
  148. package/src/function/matrix/rotationMatrix.js +185 -0
  149. package/src/function/matrix/sqrtm.js +4 -0
  150. package/src/function/probability/pickRandom.js +2 -6
  151. package/src/function/statistics/variance.js +4 -4
  152. package/src/function/string/baseUtils.js +29 -0
  153. package/src/function/string/bin.js +23 -0
  154. package/src/function/string/hex.js +23 -0
  155. package/src/function/string/oct.js +24 -0
  156. package/src/type/bignumber/BigNumber.js +2 -1
  157. package/src/type/number.js +9 -1
  158. package/src/utils/object.js +3 -1
  159. package/src/version.js +1 -1
@@ -0,0 +1,185 @@
1
+ import { isBigNumber } from '../../utils/is'
2
+ import { factory } from '../../utils/factory'
3
+
4
+ const name = 'rotationMatrix'
5
+ const dependencies = [
6
+ 'typed',
7
+ 'config',
8
+ 'multiplyScalar',
9
+ 'addScalar',
10
+ 'unaryMinus',
11
+ 'norm',
12
+ 'matrix',
13
+ 'BigNumber',
14
+ 'DenseMatrix',
15
+ 'SparseMatrix',
16
+ 'cos',
17
+ 'sin'
18
+ ]
19
+
20
+ export const createRotationMatrix = /* #__PURE__ */ factory(name, dependencies, (
21
+ {
22
+ typed, config, multiplyScalar,
23
+ addScalar, unaryMinus, norm, BigNumber,
24
+ matrix, DenseMatrix, SparseMatrix, cos, sin
25
+ }) => {
26
+ /**
27
+ * Create a 2-dimensional counter-clockwise rotation matrix (2x2) for a given angle (expressed in radians).
28
+ * Create a 2-dimensional counter-clockwise rotation matrix (3x3) by a given angle (expressed in radians) around a given axis (1x3).
29
+ *
30
+ * Syntax:
31
+ *
32
+ * math.rotationMatrix(theta)
33
+ * math.rotationMatrix(theta, format)
34
+ * math.rotationMatrix(theta, [v])
35
+ * math.rotationMatrix(theta, [v], format)
36
+ *
37
+ * Examples:
38
+ *
39
+ * math.rotationMatrix(math.pi / 2) // returns [[0, -1], [1, 0]]
40
+ * math.rotationMatrix(math.bignumber(45)) // returns [[ bignumber(1 / sqrt(2)), - bignumber(1 / sqrt(2))], [ bignumber(1 / sqrt(2)), bignumber(1 / sqrt(2))]]
41
+ * math.rotationMatrix(math.complex(1 + i)) // returns [[cos(1 + i), -sin(1 + i)], [sin(1 + i), cos(1 + i)]]
42
+ * math.rotationMatrix(math.unit('1rad')) // returns [[cos(1), -sin(1)], [sin(1), cos(1)]]
43
+ *
44
+ * math.rotationMatrix(math.pi / 2, [0, 1, 0]) // returns [[0, 0, 1], [0, 1, 0], [-1, 0, 0]]
45
+ * math.rotationMatrix(math.pi / 2, matrix([0, 1, 0])) // returns matrix([[0, 0, 1], [0, 1, 0], [-1, 0, 0]])
46
+ *
47
+ *
48
+ * See also:
49
+ *
50
+ * matrix, cos, sin
51
+ *
52
+ *
53
+ * @param {number | BigNumber | Complex | Unit} theta Rotation angle
54
+ * @param {Array | Matrix} [v] Rotation axis
55
+ * @param {string} [format] Result Matrix storage format
56
+ * @return {Array | Matrix} Rotation matrix
57
+ */
58
+
59
+ return typed(name, {
60
+ '': function () {
61
+ return (config.matrix === 'Matrix') ? matrix([]) : []
62
+ },
63
+
64
+ string: function (format) {
65
+ return matrix(format)
66
+ },
67
+
68
+ 'number | BigNumber | Complex | Unit': function (theta) {
69
+ return _rotationMatrix2x2(theta, config.matrix === 'Matrix' ? 'dense' : undefined)
70
+ },
71
+
72
+ 'number | BigNumber | Complex | Unit, string': function (theta, format) {
73
+ return _rotationMatrix2x2(theta, format)
74
+ },
75
+
76
+ 'number | BigNumber | Complex | Unit, Array': function (theta, v) {
77
+ const matrixV = matrix(v)
78
+ _validateVector(matrixV)
79
+ return _rotationMatrix3x3(theta, matrixV, config.matrix === 'Matrix' ? 'dense' : undefined)
80
+ },
81
+
82
+ 'number | BigNumber | Complex | Unit, Matrix': function (theta, v) {
83
+ _validateVector(v)
84
+ return _rotationMatrix3x3(theta, v, config.matrix === 'Matrix' ? 'dense' : undefined)
85
+ },
86
+
87
+ 'number | BigNumber | Complex | Unit, Array, string': function (theta, v, format) {
88
+ const matrixV = matrix(v)
89
+ _validateVector(matrixV)
90
+ return _rotationMatrix3x3(theta, matrixV, format)
91
+ },
92
+
93
+ 'number | BigNumber | Complex | Unit, Matrix, string': function (theta, v, format) {
94
+ _validateVector(v)
95
+ return _rotationMatrix3x3(theta, v, format)
96
+ }
97
+
98
+ })
99
+
100
+ /**
101
+ * Returns 2x2 matrix of 2D rotation of angle theta
102
+ *
103
+ * @param {number | BigNumber | Complex | Unit} theta The rotation angle
104
+ * @param {string} format The result Matrix storage format
105
+ * @returns {Matrix}
106
+ * @private
107
+ */
108
+ function _rotationMatrix2x2 (theta, format) {
109
+ const Big = isBigNumber(theta)
110
+
111
+ const minusOne = Big ? new BigNumber(-1) : -1
112
+ const cosTheta = cos(theta)
113
+ const sinTheta = sin(theta)
114
+ const data = [[cosTheta, multiplyScalar(minusOne, sinTheta)], [sinTheta, cosTheta]]
115
+
116
+ return _convertToFormat(data, format)
117
+ }
118
+
119
+ function _validateVector (v) {
120
+ const size = v.size()
121
+ if (size.length < 1 || size[0] !== 3) {
122
+ throw new RangeError('Vector must be of dimensions 1x3')
123
+ }
124
+ }
125
+
126
+ function _mul (array) {
127
+ return array.reduce((p, curr) => multiplyScalar(p, curr))
128
+ }
129
+
130
+ function _convertToFormat (data, format) {
131
+ if (format) {
132
+ if (format === 'sparse') {
133
+ return new SparseMatrix(data)
134
+ }
135
+ if (format === 'dense') {
136
+ return new DenseMatrix(data)
137
+ }
138
+ throw new TypeError(`Unknown matrix type "${format}"`)
139
+ }
140
+ return data
141
+ }
142
+
143
+ /**
144
+ * Returns a 3x3 matrix of rotation of angle theta around vector v
145
+ *
146
+ * @param {number | BigNumber | Complex | Unit} theta The rotation angle
147
+ * @param {Matrix} v The rotation axis vector
148
+ * @param {string} format The storage format of the resulting matrix
149
+ * @returns {Matrix}
150
+ * @private
151
+ */
152
+ function _rotationMatrix3x3 (theta, v, format) {
153
+ const normV = norm(v)
154
+ if (normV === 0) {
155
+ return _convertToFormat([], format)
156
+ }
157
+
158
+ const Big = isBigNumber(theta) ? BigNumber : null
159
+
160
+ const one = Big ? new Big(1) : 1
161
+ const minusOne = Big ? new Big(-1) : -1
162
+ const vx = Big ? new Big(v.get([0]) / normV) : v.get([0]) / normV
163
+ const vy = Big ? new Big(v.get([1]) / normV) : v.get([1]) / normV
164
+ const vz = Big ? new Big(v.get([2]) / normV) : v.get([2]) / normV
165
+ const c = cos(theta)
166
+ const oneMinusC = addScalar(one, unaryMinus(c))
167
+ const s = sin(theta)
168
+
169
+ const r11 = addScalar(c, _mul([vx, vx, oneMinusC]))
170
+ const r12 = addScalar(_mul([vx, vy, oneMinusC]), _mul([minusOne, vz, s]))
171
+ const r13 = addScalar(_mul([vx, vz, oneMinusC]), _mul([vy, s]))
172
+
173
+ const r21 = addScalar(_mul([vx, vy, oneMinusC]), _mul([vz, s]))
174
+ const r22 = addScalar(c, _mul([vy, vy, oneMinusC]))
175
+ const r23 = addScalar(_mul([vy, vz, oneMinusC]), _mul([minusOne, vx, s]))
176
+
177
+ const r31 = addScalar(_mul([vx, vz, oneMinusC]), _mul([minusOne, vy, s]))
178
+ const r32 = addScalar(_mul([vy, vz, oneMinusC]), _mul([vx, s]))
179
+ const r33 = addScalar(c, _mul([vz, vz, oneMinusC]))
180
+
181
+ const data = [[r11, r12, r13], [r21, r22, r23], [r31, r32, r33]]
182
+
183
+ return _convertToFormat(data, format)
184
+ }
185
+ })
@@ -87,6 +87,10 @@ export const createSqrtm = /* #__PURE__ */ factory(name, dependencies, ({ typed,
87
87
  '(size: ' + format(size) + ')')
88
88
  }
89
89
  }
90
+ default:
91
+ // Multi dimensional array
92
+ throw new RangeError('Matrix must be at most two dimensional ' +
93
+ '(size: ' + format(size) + ')')
90
94
  }
91
95
  }
92
96
  })
@@ -1,7 +1,7 @@
1
1
  import { factory } from '../../utils/factory'
2
2
  import { isNumber } from '../../utils/is'
3
- import { arraySize } from '../../utils/array'
4
3
  import { createRng } from './util/seededRNG'
4
+ import { flatten } from '../../utils/array'
5
5
 
6
6
  const name = 'pickRandom'
7
7
  const dependencies = ['typed', 'config', '?on']
@@ -76,15 +76,11 @@ export const createPickRandom = /* #__PURE__ */ factory(name, dependencies, ({ t
76
76
  number = 1
77
77
  }
78
78
 
79
- possibles = possibles.valueOf() // get Array
79
+ possibles = flatten(possibles.valueOf()).valueOf() // get Array
80
80
  if (weights) {
81
81
  weights = weights.valueOf() // get Array
82
82
  }
83
83
 
84
- if (arraySize(possibles).length > 1) {
85
- throw new Error('Only one dimensional vectors supported')
86
- }
87
-
88
84
  let totalWeights = 0
89
85
 
90
86
  if (typeof weights !== 'undefined') {
@@ -97,7 +97,7 @@ export const createVariance = /* #__PURE__ */ factory(name, dependencies, ({ typ
97
97
  * @private
98
98
  */
99
99
  function _var (array, normalization) {
100
- let sum = 0
100
+ let sum
101
101
  let num = 0
102
102
 
103
103
  if (array.length === 0) {
@@ -107,7 +107,7 @@ export const createVariance = /* #__PURE__ */ factory(name, dependencies, ({ typ
107
107
  // calculate the mean and number of elements
108
108
  deepForEach(array, function (value) {
109
109
  try {
110
- sum = add(sum, value)
110
+ sum = sum === undefined ? value : add(sum, value)
111
111
  num++
112
112
  } catch (err) {
113
113
  throw improveErrorMessage(err, 'variance', value)
@@ -118,10 +118,10 @@ export const createVariance = /* #__PURE__ */ factory(name, dependencies, ({ typ
118
118
  const mean = divide(sum, num)
119
119
 
120
120
  // calculate the variance
121
- sum = 0
121
+ sum = undefined
122
122
  deepForEach(array, function (value) {
123
123
  const diff = subtract(value, mean)
124
- sum = add(sum, multiply(diff, diff))
124
+ sum = sum === undefined ? multiply(diff, diff) : add(sum, multiply(diff, diff))
125
125
  })
126
126
 
127
127
  if (isNaN(sum)) {
@@ -0,0 +1,29 @@
1
+ import { factory } from '../../utils/factory'
2
+ import { isInteger } from '../../utils/number'
3
+
4
+ function baseFormatter (base) {
5
+ const prefixes = { 2: '0b', 8: '0o', 16: '0x' }
6
+ const prefix = prefixes[base]
7
+ return function (n) {
8
+ if (n > 2 ** 31 - 1 || n < -(2 ** 31)) {
9
+ throw new Error('Value must be in range [-2^31, 2^31-1]')
10
+ }
11
+ if (!isInteger(n)) {
12
+ throw new Error('Value must be an integer')
13
+ }
14
+ if (n < 0) {
15
+ n = n + 2 ** 32
16
+ }
17
+ return `${prefix}${n.toString(base)}`
18
+ }
19
+ }
20
+
21
+ const dependencies = ['typed']
22
+
23
+ export function createBaseFormatterFactory (name, base) {
24
+ return factory(name, dependencies, ({ typed }) => {
25
+ return typed(name, {
26
+ number: baseFormatter(base)
27
+ })
28
+ })
29
+ }
@@ -0,0 +1,23 @@
1
+ import { createBaseFormatterFactory } from './baseUtils'
2
+
3
+ /**
4
+ * Format a number as binary.
5
+ *
6
+ * Syntax:
7
+ *
8
+ * math.bin(value)
9
+ *
10
+ * Examples:
11
+ *
12
+ * //the following outputs "0b10"
13
+ * math.bin(2)
14
+ *
15
+ * See also:
16
+ *
17
+ * oct
18
+ * hex
19
+ *
20
+ * @param {number} value Value to be stringified
21
+ * @return {string} The formatted value
22
+ */
23
+ export const createBin = createBaseFormatterFactory('bin', 2)
@@ -0,0 +1,23 @@
1
+ import { createBaseFormatterFactory } from './baseUtils'
2
+
3
+ /**
4
+ * Format a number as hexadecimal.
5
+ *
6
+ * Syntax:
7
+ *
8
+ * math.hex(value)
9
+ *
10
+ * Examples:
11
+ *
12
+ * //the following outputs "0xF0"
13
+ * math.hex(240)
14
+ *
15
+ * See also:
16
+ *
17
+ * oct
18
+ * bin
19
+ *
20
+ * @param {number} value Value to be stringified
21
+ * @return {string} The formatted value
22
+ */
23
+ export const createHex = createBaseFormatterFactory('hex', 16)
@@ -0,0 +1,24 @@
1
+ import { createBaseFormatterFactory } from './baseUtils'
2
+
3
+ /**
4
+ * Format a number as octal.
5
+ *
6
+ * Syntax:
7
+ *
8
+ * math.oct(value)
9
+ *
10
+ * Examples:
11
+ *
12
+ * //the following outputs "0o70"
13
+ * math.oct(56)
14
+ *
15
+ * See also:
16
+ *
17
+ * bin
18
+ * hex
19
+ *
20
+ * @param {number} value Value to be stringified
21
+ * @return {string} The formatted value
22
+ */
23
+
24
+ export const createOct = createBaseFormatterFactory('oct', 8)
@@ -5,7 +5,8 @@ const name = 'BigNumber'
5
5
  const dependencies = ['?on', 'config']
6
6
 
7
7
  export const createBigNumberClass = /* #__PURE__ */ factory(name, dependencies, ({ on, config }) => {
8
- const BigNumber = Decimal.clone({ precision: config.precision })
8
+ const EUCLID = 9 // Use euclidian division for mod calculation
9
+ const BigNumber = Decimal.clone({ precision: config.precision, modulo: EUCLID })
9
10
 
10
11
  /**
11
12
  * Attach type information
@@ -41,10 +41,18 @@ export const createNumber = /* #__PURE__ */ factory(name, dependencies, ({ typed
41
41
 
42
42
  string: function (x) {
43
43
  if (x === 'NaN') return NaN
44
- const num = Number(x)
44
+ let num = Number(x)
45
45
  if (isNaN(num)) {
46
46
  throw new SyntaxError('String "' + x + '" is no valid number')
47
47
  }
48
+ if (['0b', '0o', '0x'].includes(x.substring(0, 2))) {
49
+ if (num > 2 ** 32 - 1) {
50
+ throw new SyntaxError(`String "${x}" is out of range`)
51
+ }
52
+ if (num & 0x80000000) {
53
+ num = -1 * ~(num - 1)
54
+ }
55
+ }
48
56
  return num
49
57
  },
50
58
 
@@ -86,7 +86,9 @@ export function deepExtend (a, b) {
86
86
  }
87
87
 
88
88
  for (const prop in b) {
89
- if (hasOwnProperty(b, prop)) {
89
+ // We check against prop not being in Object.prototype or Function.prototype
90
+ // to prevent polluting for example Object.__proto__.
91
+ if (hasOwnProperty(b, prop) && !(prop in Object.prototype) && !(prop in Function.prototype)) {
90
92
  if (b[prop] && b[prop].constructor === Object) {
91
93
  if (a[prop] === undefined) {
92
94
  a[prop] = {}
package/src/version.js CHANGED
@@ -1,3 +1,3 @@
1
- export const version = '7.2.0'
1
+ export const version = '7.5.1'
2
2
  // Note: This file is automatically generated when building math.js.
3
3
  // Changes made in this file will be overwritten.