1
0
mirror of https://github.com/MikeMcl/decimal.js.git synced 2025-06-02 23:44:16 +00:00

#181 Support BigInt

This commit is contained in:
Michael Mclaughlin 2025-01-23 15:17:36 +00:00
parent cb60444aaf
commit 6df248f559
2 changed files with 158 additions and 143 deletions

View File

@ -218,8 +218,8 @@
* Return a new Decimal whose value is the value of this Decimal clamped to the range
* delineated by `min` and `max`.
*
* min {number|string|Decimal}
* max {number|string|Decimal}
* min {number|string|bigInt|Decimal}
* max {number|string|bigInt|Decimal}
*
*/
P.clampedTo = P.clamp = function (min, max) {
@ -1124,7 +1124,7 @@
* log[b](Infinity) = Infinity
* log[b](NaN) = NaN
*
* [base] {number|string|Decimal} The base of the logarithm.
* [base] {number|string|bigInt|Decimal} The base of the logarithm.
*
*/
P.logarithm = P.log = function (base) {
@ -1218,7 +1218,7 @@
/*
* Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.
*
* arguments {number|string|Decimal}
* arguments {number|string|bigInt|Decimal}
*
P.max = function () {
Array.prototype.push.call(arguments, this);
@ -1230,7 +1230,7 @@
/*
* Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.
*
* arguments {number|string|Decimal}
* arguments {number|string|bigInt|Decimal}
*
P.min = function () {
Array.prototype.push.call(arguments, this);
@ -2053,7 +2053,7 @@
* denominator. If a maximum denominator is not specified, the denominator will be the lowest
* value necessary to represent the number exactly.
*
* [maxD] {number|string|Decimal} Maximum denominator. Integer >= 1 and < Infinity.
* [maxD] {number|string|bigInt|Decimal} Maximum denominator. Integer >= 1 and < Infinity.
*
*/
P.toFraction = function (maxD) {
@ -2141,7 +2141,7 @@
*
* The return value is not affected by the value of `precision`.
*
* y {number|string|Decimal} The magnitude to round to a multiple of.
* y {number|string|bigInt|Decimal} The magnitude to round to a multiple of.
* [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
*
* 'toNearest() rounding mode not an integer: {rm}'
@ -2261,7 +2261,7 @@
*
* If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).
*
* y {number|string|Decimal} The power to which to raise this Decimal.
* y {number|string|bigInt|Decimal} The power to which to raise this Decimal.
*
*/
P.toPower = P.pow = function (y) {
@ -3254,15 +3254,15 @@
for (; ++i < args.length;) {
y = new Ctor(args[i]);
// NaN?
if (!y.s) {
x = y;
break;
}
k = x.cmp(y);
if (k === n || k === 0 && x.s === n) {
x = y;
}
@ -3522,6 +3522,8 @@
function parseDecimal(x, str) {
var e, i, len;
// TODO BigInt str: no need to check for decimal point, exponential form or leading zeros.
// Decimal point?
if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');
@ -3989,7 +3991,7 @@
/*
* Return a new Decimal whose value is the absolute value of `x`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function abs(x) {
@ -4000,7 +4002,7 @@
/*
* Return a new Decimal whose value is the arccosine in radians of `x`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function acos(x) {
@ -4012,7 +4014,7 @@
* Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to
* `precision` significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal} A value in radians.
* x {number|string|bigInt|Decimal} A value in radians.
*
*/
function acosh(x) {
@ -4024,8 +4026,8 @@
* Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant
* digits using rounding mode `rounding`.
*
* x {number|string|Decimal}
* y {number|string|Decimal}
* x {number|string|bigInt|Decimal}
* y {number|string|bigInt|Decimal}
*
*/
function add(x, y) {
@ -4037,7 +4039,7 @@
* Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`
* significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function asin(x) {
@ -4049,7 +4051,7 @@
* Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to
* `precision` significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal} A value in radians.
* x {number|string|bigInt|Decimal} A value in radians.
*
*/
function asinh(x) {
@ -4061,7 +4063,7 @@
* Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`
* significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function atan(x) {
@ -4073,7 +4075,7 @@
* Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to
* `precision` significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal} A value in radians.
* x {number|string|bigInt|Decimal} A value in radians.
*
*/
function atanh(x) {
@ -4088,8 +4090,8 @@
* Domain: [-Infinity, Infinity]
* Range: [-pi, pi]
*
* y {number|string|Decimal} The y-coordinate.
* x {number|string|Decimal} The x-coordinate.
* y {number|string|bigInt|Decimal} The y-coordinate.
* x {number|string|bigInt|Decimal} The x-coordinate.
*
* atan2(±0, -0) = ±pi
* atan2(±0, +0) = ±0
@ -4154,7 +4156,7 @@
* Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant
* digits using rounding mode `rounding`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function cbrt(x) {
@ -4165,7 +4167,7 @@
/*
* Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function ceil(x) {
@ -4176,9 +4178,9 @@
/*
* Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.
*
* x {number|string|Decimal}
* min {number|string|Decimal}
* max {number|string|Decimal}
* x {number|string|bigInt|Decimal}
* min {number|string|bigInt|Decimal}
* max {number|string|bigInt|Decimal}
*
*/
function clamp(x, min, max) {
@ -4252,7 +4254,7 @@
* Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant
* digits using rounding mode `rounding`.
*
* x {number|string|Decimal} A value in radians.
* x {number|string|bigInt|Decimal} A value in radians.
*
*/
function cos(x) {
@ -4264,7 +4266,7 @@
* Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision
* significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal} A value in radians.
* x {number|string|bigInt|Decimal} A value in radians.
*
*/
function cosh(x) {
@ -4284,7 +4286,7 @@
* The Decimal constructor and exported function.
* Return a new Decimal instance.
*
* v {number|string|Decimal} A numeric value.
* v {number|string|bigInt|Decimal} A numeric value.
*
*/
function Decimal(v) {
@ -4362,9 +4364,10 @@
}
return;
}
// Infinity, NaN.
} else if (v * 0 !== 0) {
// Infinity or NaN?
if (v * 0 !== 0) {
if (!v) x.s = NaN;
x.e = NaN;
x.d = null;
@ -4372,22 +4375,32 @@
}
return parseDecimal(x, v.toString());
} else if (t !== 'string') {
throw Error(invalidArgument + v);
}
// Minus sign?
if ((i = v.charCodeAt(0)) === 45) {
v = v.slice(1);
x.s = -1;
} else {
// Plus sign?
if (i === 43) v = v.slice(1);
x.s = 1;
if (t === 'string') {
if ((i = v.charCodeAt(0)) === 45) { // minus sign
v = v.slice(1);
x.s = -1;
} else {
if (i === 43) v = v.slice(1); // plus sign
x.s = 1;
}
return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);
}
return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);
if (t === 'bigint') {
if (v < 0) {
v = -v;
x.s = -1;
} else {
x.s = 1;
}
return parseDecimal(x, v.toString());
}
throw Error(invalidArgument + v);
}
Decimal.prototype = P;
@ -4464,8 +4477,8 @@
* Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant
* digits using rounding mode `rounding`.
*
* x {number|string|Decimal}
* y {number|string|Decimal}
* x {number|string|bigInt|Decimal}
* y {number|string|bigInt|Decimal}
*
*/
function div(x, y) {
@ -4477,7 +4490,7 @@
* Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`
* significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal} The power to which to raise the base of the natural log.
* x {number|string|bigInt|Decimal} The power to which to raise the base of the natural log.
*
*/
function exp(x) {
@ -4488,7 +4501,7 @@
/*
* Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function floor(x) {
@ -4502,7 +4515,7 @@
*
* hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)
*
* arguments {number|string|Decimal}
* arguments {number|string|bigInt|Decimal}
*
*/
function hypot() {
@ -4544,7 +4557,7 @@
* Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`
* significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function ln(x) {
@ -4558,8 +4571,8 @@
*
* log[y](x)
*
* x {number|string|Decimal} The argument of the logarithm.
* y {number|string|Decimal} The base of the logarithm.
* x {number|string|bigInt|Decimal} The argument of the logarithm.
* y {number|string|bigInt|Decimal} The base of the logarithm.
*
*/
function log(x, y) {
@ -4571,7 +4584,7 @@
* Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`
* significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function log2(x) {
@ -4583,7 +4596,7 @@
* Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`
* significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function log10(x) {
@ -4594,7 +4607,7 @@
/*
* Return a new Decimal whose value is the maximum of the arguments.
*
* arguments {number|string|Decimal}
* arguments {number|string|bigInt|Decimal}
*
*/
function max() {
@ -4605,7 +4618,7 @@
/*
* Return a new Decimal whose value is the minimum of the arguments.
*
* arguments {number|string|Decimal}
* arguments {number|string|bigInt|Decimal}
*
*/
function min() {
@ -4617,8 +4630,8 @@
* Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits
* using rounding mode `rounding`.
*
* x {number|string|Decimal}
* y {number|string|Decimal}
* x {number|string|bigInt|Decimal}
* y {number|string|bigInt|Decimal}
*
*/
function mod(x, y) {
@ -4630,8 +4643,8 @@
* Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant
* digits using rounding mode `rounding`.
*
* x {number|string|Decimal}
* y {number|string|Decimal}
* x {number|string|bigInt|Decimal}
* y {number|string|bigInt|Decimal}
*
*/
function mul(x, y) {
@ -4643,8 +4656,8 @@
* Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision
* significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal} The base.
* y {number|string|Decimal} The exponent.
* x {number|string|bigInt|Decimal} The base.
* y {number|string|bigInt|Decimal} The exponent.
*
*/
function pow(x, y) {
@ -4762,7 +4775,7 @@
*
* To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function round(x) {
@ -4778,7 +4791,7 @@
* -0 if x is -0,
* NaN otherwise
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function sign(x) {
@ -4791,7 +4804,7 @@
* Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits
* using rounding mode `rounding`.
*
* x {number|string|Decimal} A value in radians.
* x {number|string|bigInt|Decimal} A value in radians.
*
*/
function sin(x) {
@ -4803,7 +4816,7 @@
* Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`
* significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal} A value in radians.
* x {number|string|bigInt|Decimal} A value in radians.
*
*/
function sinh(x) {
@ -4815,7 +4828,7 @@
* Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant
* digits using rounding mode `rounding`.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function sqrt(x) {
@ -4827,8 +4840,8 @@
* Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits
* using rounding mode `rounding`.
*
* x {number|string|Decimal}
* y {number|string|Decimal}
* x {number|string|bigInt|Decimal}
* y {number|string|bigInt|Decimal}
*
*/
function sub(x, y) {
@ -4842,7 +4855,7 @@
*
* Only the result is rounded, not the intermediate calculations.
*
* arguments {number|string|Decimal}
* arguments {number|string|bigInt|Decimal}
*
*/
function sum() {
@ -4862,7 +4875,7 @@
* Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant
* digits using rounding mode `rounding`.
*
* x {number|string|Decimal} A value in radians.
* x {number|string|bigInt|Decimal} A value in radians.
*
*/
function tan(x) {
@ -4874,7 +4887,7 @@
* Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`
* significant digits using rounding mode `rounding`.
*
* x {number|string|Decimal} A value in radians.
* x {number|string|bigInt|Decimal} A value in radians.
*
*/
function tanh(x) {
@ -4885,7 +4898,7 @@
/*
* Return a new Decimal whose value is `x` truncated to an integer.
*
* x {number|string|Decimal}
* x {number|string|bigInt|Decimal}
*
*/
function trunc(x) {

View File

@ -254,7 +254,7 @@ li span{float:right;margin-right:10px;color:#c0c0c0}
Decimal<code class='inset'>Decimal(value) <i>&rArr; Decimal</i></code>
</h5>
<dl>
<dt><code>value</code>: <i>number|string|Decimal</i></dt>
<dt><code>value</code>: <i>number|string|bigInt|Decimal</i></dt>
<dd>
A legitimate <code>value</code> is an integer or float, including <code>&plusmn;0</code>, or
is <code>&plusmn;Infinity</code>, or <code>NaN</code>.
@ -312,7 +312,9 @@ new Decimal('0x0.0c') // '0.046875'
new Decimal('0b1.1p-5') // '0.046875'
new Decimal('0o1.4p-5') // '0.046875'
new Decimal('0x1.8p-5') // '0.046875'</pre>
new Decimal(123456000n) // '123456000'
new Decimal(BigInt('-1')) // '-1'</pre>
@ -322,7 +324,7 @@ new Decimal('0x1.8p-5') // '0.046875'</pre>
<h5 id="Dabs">abs<code class='inset'>.abs(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#abs'>absoluteValue</a></code>.</p>
<pre>a = Decimal.abs(x)
b = new Decimal(x).abs()
@ -331,7 +333,7 @@ a.equals(b) // true</pre>
<h5 id="Dacos">acos<code class='inset'>.acos(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#acos'>inverseCosine</a></code>.</p>
<pre>a = Decimal.acos(x)
b = new Decimal(x).acos()
@ -340,7 +342,7 @@ a.equals(b) // true</pre>
<h5 id="Dacosh">acosh<code class='inset'>.acosh(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#acos'>inverseHyperbolicCosine</a></code>.</p>
<pre>a = Decimal.acosh(x)
b = new Decimal(x).acosh()
@ -350,8 +352,8 @@ a.equals(b) // true</pre>
<h5 id="Dadd">add<code class='inset'>.add(x, y) <i>&rArr; Decimal</i></code></h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>y</code>: <i>number|string|Decimal</i>
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>y</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>See <code><a href='#add'>plus</a></code>.</p>
<pre>a = Decimal.add(x, y)
@ -361,7 +363,7 @@ a.equals(b) // true</pre>
<h5 id="Dasin">asin<code class='inset'>.asin(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#asin'>inverseSine</a></code>.</p>
<pre>a = Decimal.asin(x)
b = new Decimal(x).asin()
@ -370,7 +372,7 @@ a.equals(b) // true</pre>
<h5 id="Dasinh">asinh<code class='inset'>.asinh(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#asin'>inverseHyperbolicSine</a></code>.</p>
<pre>a = Decimal.asinh(x)
b = new Decimal(x).asinh()
@ -379,7 +381,7 @@ a.equals(b) // true</pre>
<h5 id="Datan">atan<code class='inset'>.atan(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#atan'>inverseTangent</a></code>.</p>
<pre>a = Decimal.atan(x)
b = new Decimal(x).atan()
@ -388,7 +390,7 @@ a.equals(b) // true</pre>
<h5 id="Datanh">atanh<code class='inset'>.atanh(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#atan'>inverseHyperbolicTangent</a></code>.</p>
<pre>a = Decimal.atanh(x)
b = new Decimal(x).atanh()
@ -398,8 +400,8 @@ a.equals(b) // true</pre>
<h5 id="Datan2">atan2<code class='inset'>.atan2(y, x) <i>&rArr; Decimal</i></code></h5>
<p>
<code>y</code>: <i>number|string|Decimal</i><br />
<code>x</code>: <i>number|string|Decimal</i>
<code>y</code>: <i>number|string|bigInt|Decimal</i><br />
<code>x</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>
Returns a new Decimal whose value is the inverse tangent in radians of the quotient of
@ -423,7 +425,7 @@ a.equals(b) // true</pre>
<h5 id="Dcbrt">cbrt<code class='inset'>.cbrt(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#cbrt'>cubeRoot</a></code>.</p>
<pre>a = Decimal.cbrt(x)
b = new Decimal(x).cbrt()
@ -432,7 +434,7 @@ a.equals(b) // true</pre>
<h5 id="Dceil">ceil<code class='inset'>.ceil(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#ceil'>ceil</a></code>.</p>
<pre>a = Decimal.ceil(x)
b = new Decimal(x).ceil()
@ -442,8 +444,8 @@ a.equals(b) // true</pre>
<h5 id="Dclamp">clamp<code class='inset'>.clamp(min, max) <i>&rArr; Decimal</i></code></h5>
<p>
<code>min</code>: <i>number|string|Decimal</i><br />
<code>max</code>: <i>number|string|Decimal</i>
<code>min</code>: <i>number|string|bigInt|Decimal</i><br />
<code>max</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>See <code><a href='#clamp'>clampedTo</a></code>.</p>
<pre>Decimal.clamp(10.1, 0, 10) // '10'</pre>
@ -488,7 +490,7 @@ D2 = Decimal.clone({ defaults: true, precision: 50 })</pre>
<h5 id="Dcos">cos<code class='inset'>.cos(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#cos'>cosine</a></code>.</p>
<pre>a = Decimal.cos(x)
b = new Decimal(x).cos()
@ -497,7 +499,7 @@ a.equals(b) // true</pre>
<h5 id="Dcosh">cosh<code class='inset'>.cosh(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#cos'>hyperbolicCosine</a></code>.</p>
<pre>a = Decimal.cosh(x)
b = new Decimal(x).cosh()
@ -507,8 +509,8 @@ a.equals(b) // true</pre>
<h5 id="Ddiv">div<code class='inset'>.div(x, y) <i>&rArr; Decimal</i></code></h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>y</code>: <i>number|string|Decimal</i>
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>y</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>See <code><a href='#div'>dividedBy</a></code>.</p>
<pre>a = Decimal.div(x, y)
@ -518,7 +520,7 @@ a.equals(b) // true</pre>
<h5 id="Dexp">exp<code class='inset'>.exp(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#exp'>naturalExponential</a></code>.</p>
<pre>a = Decimal.exp(x)
b = new Decimal(x).exp()
@ -527,7 +529,7 @@ a.equals(b) // true</pre>
<h5 id="Dfloor">floor<code class='inset'>.floor(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#floor'>floor</a></code>.</p>
<pre>a = Decimal.floor(x)
b = new Decimal(x).floor()
@ -539,8 +541,8 @@ a.equals(b) // true</pre>
hypot<code class='inset'>.hypot([x [, y, ...]]) <i>&rArr; Decimal</i></code>
</h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>y</code>: <i>number|string|Decimal</i>
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>y</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>
Returns a new Decimal whose value is the square root of the sum of the squares of the
@ -552,7 +554,7 @@ a.equals(b) // true</pre>
<h5 id="Dln">ln<code class='inset'>.ln(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#ln'>naturalLogarithm</a></code>.</p>
<pre>a = Decimal.ln(x)
b = new Decimal(x).ln()
@ -578,8 +580,8 @@ Decimal.isDecimal(b) // false</pre>
<h5 id="Dlog">log<code class='inset'>.log(x [, base]) <i>&rArr; Decimal</i></code></h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>base</code>: <i>number|string|Decimal</i>
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>base</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>See <code><a href='#log'>logarithm</a></code>.</p>
<p>
@ -593,7 +595,7 @@ a.equals(b) // true</pre>
<h5 id="Dlog2">log2<code class='inset'>.log2(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns a new Decimal whose value is the base <code>2</code> logarithm of <code>x</code>,
rounded to <a href='#precision'><code>precision</code></a> significant digits using rounding
@ -604,7 +606,7 @@ a.equals(b) // true</pre>
<h5 id="Dlog10">log10<code class='inset'>.log10(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns a new Decimal whose value is the base <code>10</code> logarithm of <code>x</code>,
rounded to <a href='#precision'><code>precision</code></a> significant digits using rounding
@ -618,8 +620,8 @@ a.equals(b) // true</pre>
max<code class='inset'>.max(x [, y, ...]) <i>&rArr; Decimal</i></code>
</h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>y</code>: <i>number|string|Decimal</i>
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>y</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>Returns a new Decimal whose value is the maximum of the <code>arguments</code>.</p>
<pre>r = Decimal.max(x, y, z)</pre>
@ -630,8 +632,8 @@ a.equals(b) // true</pre>
min<code class='inset'>.min(x [, y, ...]) <i>&rArr; Decimal</i></code>
</h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>y</code>: <i>number|string|Decimal</i>
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>y</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>Returns a new Decimal whose value is the minimum of the <code>arguments</code>.</p>
<pre>r = Decimal.min(x, y, z)</pre>
@ -640,8 +642,8 @@ a.equals(b) // true</pre>
<h5 id="Dmod">mod<code class='inset'>.mod(x, y) <i>&rArr; Decimal</i></code></h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>y</code>: <i>number|string|Decimal</i>
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>y</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>See <code><a href='#mod'>modulo</a></code>.</p>
<pre>a = Decimal.mod(x, y)
@ -652,8 +654,8 @@ a.equals(b) // true</pre>
<h5 id="Dmul">mul<code class='inset'>.mul(x, y) <i>&rArr; Decimal</i></code></h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>y</code>: <i>number|string|Decimal</i>
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>y</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>See <code><a href='#mul'>times</a></code>.</p>
<pre>a = Decimal.mul(x, y)
@ -685,8 +687,8 @@ a.equals(b) // true</pre>
<h5 id="Dpow">pow<code class='inset'>.pow(base, exponent) <i>&rArr; Decimal</i></code></h5>
<p>
<code>base</code>: <i>number|string|Decimal</i><br />
<code>exponent</code>: <i>number|string|Decimal</i>
<code>base</code>: <i>number|string|bigInt|Decimal</i><br />
<code>exponent</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>See <code><a href="#pow">toPower</a></code>.</p>
<pre>a = Decimal.pow(x, y)
@ -735,7 +737,7 @@ Decimal.random(20) // '0.78193327636914089009'</pre>
<h5 id="Dround">round<code class='inset'>.round(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#round'>round</a></code>.</p>
<pre>a = Decimal.round(x)
b = new Decimal(x).round()
@ -792,7 +794,7 @@ Decimal.set({ precision: 50, defaults: true })</pre>
<h5 id="Dsign">sign<code class='inset'>.sign(x) <i>&rArr; number</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<table>
<tr><th>Returns</th><th>&nbsp;</th></tr>
<tr>
@ -821,7 +823,7 @@ Decimal.set({ precision: 50, defaults: true })</pre>
<h5 id="Dsin">sin<code class='inset'>.sin(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#sin'>sine</a></code>.</p>
<pre>a = Decimal.sin(x)
b = new Decimal(x).sin()
@ -830,7 +832,7 @@ a.equals(b) // true</pre>
<h5 id="Dsinh">sinh<code class='inset'>.sinh(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#sin'>hyperbolicSine</a></code>.</p>
<pre>a = Decimal.sinh(x)
b = new Decimal(x).sinh()
@ -839,7 +841,7 @@ a.equals(b) // true</pre>
<h5 id="Dsqrt">sqrt<code class='inset'>.sqrt(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <a href='#sqrt'>squareRoot</a>.</p>
<pre>a = Decimal.sqrt(x)
b = new Decimal(x).sqrt()
@ -849,8 +851,8 @@ a.equals(b) // true</pre>
<h5 id="Dsub">sub<code class='inset'>.sub(x, y) <i>&rArr; Decimal</i></code></h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>y</code>: <i>number|string|Decimal</i>
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>y</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>See <code><a href='#sub'>minus</a></code>.</p>
<pre>a = Decimal.sub(x, y)
@ -861,8 +863,8 @@ a.equals(b) // true</pre>
<h5 id="Dsum">sum<code class='inset'>.sum(x [, y, ...]) <i>&rArr; Decimal</i></code></h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>y</code>: <i>number|string|Decimal</i>
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>y</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>
Returns a new Decimal whose value is the sum of the <code>arguments</code>,
@ -879,7 +881,7 @@ Decimal.sum(x, y, z) // '10'</pre>
<h5 id="Dtan">tan<code class='inset'>.tan(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#tan'>tangent</a></code>.</p>
<pre>a = Decimal.tan(x)
b = new Decimal(x).tan()
@ -888,7 +890,7 @@ a.equals(b) // true</pre>
<h5 id="Dtanh">tanh<code class='inset'>.tanh(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#tan'>hyperbolicTangent</a></code>.</p>
<pre>a = Decimal.tanh(x)
b = new Decimal(x).tanh()
@ -897,7 +899,7 @@ a.equals(b) // true</pre>
<h5 id="Dtrunc">trunc<code class='inset'>.trunc(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>See <code><a href='#trunc'>truncated</a></code>.</p>
<pre>a = Decimal.trunc(x)
b = new Decimal(x).trunc()
@ -1282,8 +1284,8 @@ y.ceil() // '-1'</pre>
<h5 id="clamp">clampedTo<code class='inset'>.clamp(min, max) <i>&rArr; Decimal</i></code></h5>
<p>
<code>min</code>: <i>number|string|Decimal</i><br />
<code>max</code>: <i>number|string|Decimal</i>
<code>min</code>: <i>number|string|bigInt|Decimal</i><br />
<code>max</code>: <i>number|string|bigInt|Decimal</i>
</p>
<p>
Returns a new Decimal whose value is the value of this Decimal clamped to the range
@ -1303,7 +1305,7 @@ x.clamp(-10, -0.1) // '-0.1'</pre>
<h5 id="cmp">comparedTo<code class='inset'>.cmp(x) <i>&rArr; number</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<table>
<tr><th>Returns</th><th>&nbsp;</th></tr>
<tr>
@ -1383,7 +1385,7 @@ y.dp() // '6'</pre>
<h5 id="div">dividedBy<code class='inset'>.div(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns a new Decimal whose value is the value of this Decimal divided by <code>x</code>,
rounded to <a href='#precision'><code>precision</code></a> significant digits using rounding
@ -1400,7 +1402,7 @@ x.div(5) // '71'</pre>
<h5 id="divToInt">
dividedToIntegerBy<code class='inset'>.divToInt(x) <i>&rArr; Decimal</i></code>
</h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Return a new Decimal whose value is the integer part of dividing this Decimal by
<code>x</code>, rounded to <code><a href='#precision'>precision</a></code> significant digits
@ -1415,7 +1417,7 @@ x.divToInt(0.7) // '7'</pre>
<h5 id="eq">equals<code class='inset'>.eq(x) <i>&rArr; boolean</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns <code>true</code> if the value of this Decimal equals the value of <code>x</code>,
otherwise returns <code>false</code>.<br /> As with JavaScript, <code>NaN</code> does not
@ -1451,7 +1453,7 @@ y.floor() // '-2'</pre>
<h5 id="gt">greaterThan<code class='inset'>.gt(x) <i>&rArr; boolean</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns <code>true</code> if the value of this Decimal is greater than the value of
<code>x</code>, otherwise returns <code>false</code>.
@ -1468,7 +1470,7 @@ new Decimal(0).gt(x) // false</pre>
<h5 id="gte">
greaterThanOrEqualTo<code class='inset'>.gte(x) <i>&rArr; boolean</i></code>
</h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns <code>true</code> if the value of this Decimal is greater than or equal to the value
of <code>x</code>, otherwise returns <code>false</code>.
@ -1748,7 +1750,7 @@ y.isZero() // false</pre>
<h5 id="lt">lessThan<code class='inset'>.lt(x) <i>&rArr; boolean</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns <code>true</code> if the value of this Decimal is less than the value of
<code>x</code>, otherwise returns <code>false</code>.
@ -1763,7 +1765,7 @@ new Decimal(0).lt(x) // true</pre>
<h5 id="lte">lessThanOrEqualTo<code class='inset'>.lte(x) <i>&rArr; boolean</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns <code>true</code> if the value of this Decimal is less than or equal to the value of
<code>x</code>, otherwise returns <code>false</code>.
@ -1778,7 +1780,7 @@ new Decimal(-1).lte(x) // true</pre>
<h5 id="log">logarithm<code class='inset'>.log(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns a new Decimal whose value is the base <code>x</code> logarithm of the value of this
Decimal, rounded to <a href='#precision'><code>precision</code></a> significant digits using
@ -1810,7 +1812,7 @@ y.log(2) // '8'</pre>
<h5 id="sub">minus<code class='inset'>.minus(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns a new Decimal whose value is the value of this Decimal minus <code>x</code>, rounded
to <a href='#precision'><code>precision</code></a> significant digits using rounding mode
@ -1824,7 +1826,7 @@ x.minus(0.1) // '0.2'</pre>
<h5 id="mod">modulo<code class='inset'>.mod(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns a new Decimal whose value is the value of this Decimal modulo <code>x</code>,
rounded to <a href='#precision'><code>precision</code></a> significant digits using rounding
@ -1931,7 +1933,7 @@ y.neg() // '1.3'</pre>
<h5 id="add">plus<code class='inset'>.plus(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns a new Decimal whose value is the value of this Decimal plus <code>x</code>, rounded to
<a href='#precision'><code>precision</code></a> significant digits using rounding mode
@ -2042,7 +2044,7 @@ y.tan() // '0.93159645994407246117'</pre>
<h5 id="mul">times<code class='inset'>.times(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i></p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i></p>
<p>
Returns a new Decimal whose value is the value of this Decimal times <code>x</code>,
rounded to <a href='#precision'><code>precision</code></a> significant digits using rounding
@ -2209,7 +2211,7 @@ y.toFixed(5) // '3.45600'</pre>
<code class='inset'>.toFraction([max_denominator]) <i>&rArr; [Decimal, Decimal]</i></code>
</h5>
<p>
<code>max_denominator</code>: <i>number|string|Decimal</i>: <code>1</code> &gt;= integer &lt;
<code>max_denominator</code>: <i>number|string|bigInt|Decimal</i>: <code>1</code> &gt;= integer &lt;
<code>Infinity</code>
</p>
<p>
@ -2275,7 +2277,7 @@ x.toHex(1) // '0x1p+8'</pre>
toNearest<code class='inset'>.toNearest(x [, rm]) <i>&rArr; Decimal</i></code>
</h5>
<p>
<code>x</code>: <i>number|string|Decimal</i><br />
<code>x</code>: <i>number|string|bigInt|Decimal</i><br />
<code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive
</p>
<p>
@ -2353,7 +2355,7 @@ x.toOctal(1) // '0o1p+8'</pre>
<h5 id="pow">toPower<code class='inset'>.pow(x) <i>&rArr; Decimal</i></code></h5>
<p><code>x</code>: <i>number|string|Decimal</i>: integer or non-integer</p>
<p><code>x</code>: <i>number|string|bigInt|Decimal</i>: integer or non-integer</p>
<p>
Returns a new Decimal whose value is the value of this Decimal raised to the power
<code>x</code>, rounded to <a href='#precision'><code>precision</code></a> significant digits