Socket
Socket
Sign inDemoInstall

big.js

Package Overview
Dependencies
Maintainers
1
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

big.js - npm Package Compare versions

Comparing version 3.2.0 to 4.0.0

1653

big.js

@@ -1,1146 +0,973 @@

/* big.js v3.1.3 https://github.com/MikeMcl/big.js/LICENCE */
/* big.js v4.0.0 https://github.com/MikeMcl/big.js/LICENCE */
;(function (global) {
'use strict';
'use strict';
/*
big.js v3.1.3
A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.
https://github.com/MikeMcl/big.js/
Copyright (c) 2014 Michael Mclaughlin <M8ch88l@gmail.com>
MIT Expat Licence
*/
* big.js v4.0.0
* A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.
* https://github.com/MikeMcl/big.js/
* Copyright (c) 2014 Michael Mclaughlin <M8ch88l@gmail.com>
* MIT Expat Licence
*/
/***************************** EDITABLE DEFAULTS ******************************/
// The default values below must be integers within the stated ranges.
/************************************** EDITABLE DEFAULTS *****************************************/
/*
* The maximum number of decimal places of the results of operations
* involving division: div and sqrt, and pow with negative exponents.
*/
var DP = 20, // 0 to MAX_DP
// The default values below must be integers within the stated ranges.
/*
* The rounding mode used when rounding to the above decimal places.
*
* 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)
* 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)
* 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)
* 3 Away from zero. (ROUND_UP)
*/
RM = 1, // 0, 1, 2 or 3
/*
* The maximum number of decimal places (DP) of the results of operations involving division: div
* and sqrt, and pow with negative exponents.
*/
var DP = 20, // 0 to MAX_DP
// The maximum value of DP and Big.DP.
MAX_DP = 1E6, // 0 to 1000000
// The maximum magnitude of the exponent argument to the pow method.
MAX_POWER = 1E6, // 1 to 1000000
/*
* The exponent value at and beneath which toString returns exponential
* notation.
* JavaScript's Number type: -7
* -1000000 is the minimum recommended exponent value of a Big.
*/
E_NEG = -7, // 0 to -1000000
/*
* The exponent value at and above which toString returns exponential
* notation.
* JavaScript's Number type: 21
* 1000000 is the maximum recommended exponent value of a Big.
* (This limit is not enforced or checked.)
*/
E_POS = 21, // 0 to 1000000
/******************************************************************************/
// The shared prototype object.
P = {},
isValid = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
Big;
/*
* Create and return a Big constructor.
* The rounding mode (RM) used when rounding to the above decimal places.
*
* 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)
* 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)
* 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)
* 3 Away from zero. (ROUND_UP)
*/
function bigFactory() {
RM = 1, // 0, 1, 2 or 3
/*
* The Big constructor and exported function.
* Create and return a new instance of a Big number object.
*
* n {number|string|Big} A numeric value.
*/
function Big(n) {
var x = this;
// The maximum value of DP and Big.DP.
MAX_DP = 1E6, // 0 to 1000000
// Enable constructor usage without new.
if (!(x instanceof Big)) {
return n === void 0 ? bigFactory() : new Big(n);
}
// The maximum magnitude of the exponent argument to the pow method.
MAX_POWER = 1E6, // 1 to 1000000
// Duplicate.
if (n instanceof Big) {
x.s = n.s;
x.e = n.e;
x.c = n.c.slice();
} else {
parse(x, n);
}
/*
* The negative exponent (NE) at and beneath which toString returns exponential notation.
* (JavaScript numbers: -7)
* -1000000 is the minimum recommended exponent value of a Big.
*/
NE = -7, // 0 to -1000000
/*
* Retain a reference to this Big constructor, and shadow
* Big.prototype.constructor which points to Object.
*/
x.constructor = Big;
}
Big.prototype = P;
Big.DP = DP;
Big.RM = RM;
Big.E_NEG = E_NEG;
Big.E_POS = E_POS;
return Big;
}
// Private functions
/*
* Return a string representing the value of Big x in normal or exponential
* notation to dp fixed decimal places or significant digits.
*
* x {Big} The Big to format.
* dp {number} Integer, 0 to MAX_DP inclusive.
* toE {number} 1 (toExponential), 2 (toPrecision) or undefined (toFixed).
* The positive exponent (PE) at and above which toString returns exponential notation.
* (JavaScript numbers: 21)
* 1000000 is the maximum recommended exponent value of a Big.
* (This limit is not enforced or checked.)
*/
function format(x, dp, toE) {
var Big = x.constructor,
PE = 21, // 0 to 1000000
// The index (normal notation) of the digit that may be rounded up.
i = dp - (x = new Big(x)).e,
c = x.c;
/**************************************************************************************************/
// Round?
if (c.length > ++dp) {
rnd(x, i, Big.RM);
}
if (!c[0]) {
++i;
} else if (toE) {
i = dp;
// The shared prototype object.
P = {},
isValid = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
bigError = '[BigError] ',
undef = void 0,
Big;
// toFixed
} else {
c = x.c;
// Recalculate i as x.e may have changed if value rounded up.
i = x.e + i + 1;
}
/*
* Create and return a Big constructor.
*
*/
function bigFactory() {
// Append zeros?
for (; c.length < i; c.push(0)) {
}
i = x.e;
/*
* toPrecision returns exponential notation if the number of
* significant digits specified is less than the number of digits
* necessary to represent the integer part of the value in normal
* notation.
*/
return toE === 1 || toE && (dp <= i || i <= Big.E_NEG) ?
// Exponential notation.
(x.s < 0 && c[0] ? '-' : '') +
(c.length > 1 ? c[0] + '.' + c.join('').slice(1) : c[0]) +
(i < 0 ? 'e' : 'e+') + i
// Normal notation.
: x.toString();
}
/*
* Parse the number or string value passed to a Big constructor.
* The Big constructor and exported function.
* Create and return a new instance of a Big number object.
*
* x {Big} A Big number instance.
* n {number|string} A numeric value.
* n {number|string|Big} A numeric value.
*/
function parse(x, n) {
var e, i, nL;
function Big(n) {
var x = this;
// Minus zero?
if (n === 0 && 1 / n < 0) {
n = '-0';
// Enable constructor usage without new.
if (!(x instanceof Big)) return n === undef ? bigFactory() : new Big(n);
// Ensure n is string and check validity.
} else if (!isValid.test(n += '')) {
throwErr(NaN);
}
// Duplicate.
if (n instanceof Big) {
x.s = n.s;
x.e = n.e;
x.c = n.c.slice();
} else {
parse(x, n);
}
// Determine sign.
x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;
/*
* Retain a reference to this Big constructor, and shadow Big.prototype.constructor which
* points to Object.
*/
x.constructor = Big;
}
// Decimal point?
if ((e = n.indexOf('.')) > -1) {
n = n.replace('.', '');
}
Big.prototype = P;
Big.DP = DP;
Big.RM = RM;
Big.NE = NE;
Big.PE = PE;
// Exponential form?
if ((i = n.search(/e/i)) > 0) {
return Big;
}
// Determine exponent.
if (e < 0) {
e = i;
}
e += +n.slice(i + 1);
n = n.substring(0, i);
} else if (e < 0) {
// Private functions
// Integer.
e = n.length;
}
nL = n.length;
/*
* Return a string representing the value of Big x in normal or exponential notation to dp fixed
* decimal places or significant digits.
*
* x {Big} The Big to format.
* dp {number} Integer, 0 to MAX_DP inclusive.
* toE {number} 1 (toExponential), 2 (toPrecision) or undefined (toFixed).
*/
function format(x, dp, toE) {
var Big = x.constructor,
// Determine leading zeros.
for (i = 0; i < nL && n.charAt(i) == '0'; i++) {
}
// The index (normal notation) of the digit that may be rounded up.
i = dp - (x = new Big(x)).e,
c = x.c;
if (i == nL) {
// Round?
if (c.length > ++dp) rnd(x, i, Big.RM);
// Zero.
x.c = [ x.e = 0 ];
} else {
if (!c[0]) {
++i;
} else if (toE) {
i = dp;
// Determine trailing zeros.
for (; nL > 0 && n.charAt(--nL) == '0';) {
}
// toFixed
} else {
c = x.c;
x.e = e - i - 1;
x.c = [];
// Convert string to array of digits without leading/trailing zeros.
//for (e = 0; i <= nL; x.c[e++] = +n.charAt(i++)) {
for (; i <= nL; x.c.push(+n.charAt(i++))) {
}
}
return x;
// Recalculate i as x.e may have changed if value rounded up.
i = x.e + i + 1;
}
// Append zeros?
for (; c.length < i;) c.push(0);
i = x.e;
/*
* Round Big x to a maximum of dp decimal places using rounding mode rm.
* Called by div, sqrt and round.
*
* x {Big} The Big to round.
* dp {number} Integer, 0 to MAX_DP inclusive.
* rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP)
* [more] {boolean} Whether the result of division was truncated.
* toPrecision returns exponential notation if the number of significant digits specified is
* less than the number of digits necessary to represent the integer part of the value in
* normal notation.
*/
function rnd(x, dp, rm, more) {
var u,
xc = x.c,
i = x.e + dp + 1;
return toE === 1 || toE && (dp <= i || i <= Big.NE) ? (x.s < 0 && c[0] ? '-' : '') +
(c.length > 1 ? c[0] + '.' + c.join('').slice(1) : c[0]) + (i < 0 ? 'e' : 'e+') + i
: x.toString();
}
if (rm === 1) {
// xc[i] is the digit after the digit that may be rounded up.
more = xc[i] >= 5;
} else if (rm === 2) {
more = xc[i] > 5 || xc[i] == 5 &&
(more || i < 0 || xc[i + 1] !== u || xc[i - 1] & 1);
} else if (rm === 3) {
more = more || xc[i] !== u || i < 0;
} else {
more = false;
/*
* Parse the number or string value passed to a Big constructor.
*
* x {Big} A Big number instance.
* n {number|string} A numeric value.
*/
function parse(x, n) {
var e, i, nL;
if (rm !== 0) {
throwErr('!Big.RM!');
}
}
// Minus zero?
if (n === 0 && 1 / n < 0) n = '-0';
else if (!isValid.test(n += '')) throw Error(bigError + NaN);
if (i < 1 || !xc[0]) {
// Determine sign.
x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;
if (more) {
// Decimal point?
if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');
// 1, 0.1, 0.01, 0.001, 0.0001 etc.
x.e = -dp;
x.c = [1];
} else {
// Exponential form?
if ((i = n.search(/e/i)) > 0) {
// Zero.
x.c = [x.e = 0];
}
} else {
// Determine exponent.
if (e < 0) e = i;
e += +n.slice(i + 1);
n = n.substring(0, i);
} else if (e < 0) {
// Remove any digits after the required decimal places.
xc.length = i--;
// Integer.
e = n.length;
}
// Round up?
if (more) {
nL = n.length;
// Rounding up may mean the previous digit has to be rounded up.
for (; ++xc[i] > 9;) {
xc[i] = 0;
// Determine leading zeros.
for (i = 0; i < nL && n.charAt(i) == '0';) ++i;
if (!i--) {
++x.e;
xc.unshift(1);
}
}
}
if (i == nL) {
// Remove trailing zeros.
for (i = xc.length; !xc[--i]; xc.pop()) {
}
}
// Zero.
x.c = [x.e = 0];
} else {
return x;
// Determine trailing zeros.
for (; nL > 0 && n.charAt(--nL) == '0';);
x.e = e - i - 1;
x.c = [];
// Convert string to array of digits without leading/trailing zeros.
for (e = 0; i <= nL;) x.c[e++] = +n.charAt(i++);
}
return x;
}
/*
* Throw a BigError.
*
* message {string} The error message.
*/
function throwErr(message) {
var err = new Error(message);
err.name = 'BigError';
throw err;
}
/*
* Round Big x to a maximum of dp decimal places using rounding mode rm.
* Called by div, sqrt and round.
*
* x {Big} The Big to round.
* dp {number} Integer, 0 to MAX_DP inclusive.
* rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP)
* [more] {boolean} Whether the result of division was truncated.
*/
function rnd(x, dp, rm, more) {
var xc = x.c,
i = x.e + dp + 1;
if (rm === 1) {
// Prototype/instance methods
// xc[i] is the digit after the digit that may be rounded up.
more = xc[i] >= 5;
} else if (rm === 2) {
more = xc[i] > 5 || xc[i] == 5 && (more || i < 0 || xc[i + 1] !== undef || xc[i - 1] & 1);
} else if (rm === 3) {
more = more || xc[i] !== undef || i < 0;
} else {
more = false;
if (rm !== 0) throw Error(bigError + 'RM: ' + rm);
}
if (i < 1 || !xc[0]) {
if (more) {
/*
* Return a new Big whose value is the absolute value of this Big.
*/
P.abs = function () {
var x = new this.constructor(this);
x.s = 1;
// 1, 0.1, 0.01, 0.001, 0.0001 etc.
x.e = -dp;
x.c = [1];
} else {
return x;
};
// Zero.
x.c = [x.e = 0];
}
} else {
// Remove any digits after the required decimal places.
xc.length = i--;
/*
* Return
* 1 if the value of this Big is greater than the value of Big y,
* -1 if the value of this Big is less than the value of Big y, or
* 0 if they have the same value.
*/
P.cmp = function (y) {
var xNeg,
x = this,
xc = x.c,
yc = (y = new x.constructor(y)).c,
i = x.s,
j = y.s,
k = x.e,
l = y.e;
// Round up?
if (more) {
// Either zero?
if (!xc[0] || !yc[0]) {
return !xc[0] ? !yc[0] ? 0 : -j : i;
// Rounding up may mean the previous digit has to be rounded up.
for (; ++xc[i] > 9;) {
xc[i] = 0;
if (!i--) {
++x.e;
xc.unshift(1);
}
}
}
// Signs differ?
if (i != j) {
return i;
}
xNeg = i < 0;
// Remove trailing zeros.
for (i = xc.length; !xc[--i];) xc.pop();
}
// Compare exponents.
if (k != l) {
return k > l ^ xNeg ? 1 : -1;
}
return x;
}
i = -1;
j = (k = xc.length) < (l = yc.length) ? k : l;
// Compare digit by digit.
for (; ++i < j;) {
// Prototype/instance methods
if (xc[i] != yc[i]) {
return xc[i] > yc[i] ^ xNeg ? 1 : -1;
}
}
// Compare lengths.
return k == l ? 0 : k > l ^ xNeg ? 1 : -1;
};
/*
* Return a new Big whose value is the absolute value of this Big.
*/
P.abs = function () {
var x = new this.constructor(this);
x.s = 1;
return x;
};
/*
* Return a new Big whose value is the value of this Big divided by the
* value of Big y, rounded, if necessary, to a maximum of Big.DP decimal
* places using rounding mode Big.RM.
*/
P.div = function (y) {
var x = this,
Big = x.constructor,
// dividend
dvd = x.c,
//divisor
dvs = (y = new Big(y)).c,
s = x.s == y.s ? 1 : -1,
dp = Big.DP;
/*
* Return 1 if the value of this Big is greater than the value of Big y,
* -1 if the value of this Big is less than the value of Big y, or
* 0 if they have the same value.
*/
P.cmp = function (y) {
var xNeg,
x = this,
xc = x.c,
yc = (y = new x.constructor(y)).c,
i = x.s,
j = y.s,
k = x.e,
l = y.e;
if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {
throwErr('!Big.DP!');
}
// Either zero?
if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;
// Either 0?
if (!dvd[0] || !dvs[0]) {
// Signs differ?
if (i != j) return i;
// If both are 0, throw NaN
if (dvd[0] == dvs[0]) {
throwErr(NaN);
}
xNeg = i < 0;
// If dvs is 0, throw +-Infinity.
if (!dvs[0]) {
throwErr(s / 0);
}
// Compare exponents.
if (k != l) return k > l ^ xNeg ? 1 : -1;
// dvd is 0, return +-0.
return new Big(s * 0);
}
i = -1;
j = (k = xc.length) < (l = yc.length) ? k : l;
var dvsL, dvsT, next, cmp, remI, u,
dvsZ = dvs.slice(),
dvdI = dvsL = dvs.length,
dvdL = dvd.length,
// remainder
rem = dvd.slice(0, dvsL),
remL = rem.length,
// quotient
q = y,
qc = q.c = [],
qi = 0,
digits = dp + (q.e = x.e - y.e) + 1;
// Compare digit by digit.
for (; ++i < j;) {
if (xc[i] != yc[i]) return xc[i] > yc[i] ^ xNeg ? 1 : -1;
}
q.s = s;
s = digits < 0 ? 0 : digits;
// Compare lengths.
return k == l ? 0 : k > l ^ xNeg ? 1 : -1;
};
// Create version of divisor with leading zero.
dvsZ.unshift(0);
// Add zeros to make remainder as long as divisor.
for (; remL++ < dvsL; rem.push(0)) {
}
/*
* Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,
* if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.
*/
P.div = function (y) {
var x = this,
Big = x.constructor,
dvd = x.c, // dividend
dvs = (y = new Big(y)).c, // divisor
s = x.s == y.s ? 1 : -1,
dp = Big.DP;
do {
if (dp !== ~~dp || dp < 0 || dp > MAX_DP) throw Error(bigError + 'DP: ' + dp);
// 'next' is how many times the divisor goes into current remainder.
for (next = 0; next < 10; next++) {
// Either 0?
if (!dvd[0] || !dvs[0]) {
// Compare divisor and remainder.
if (dvsL != (remL = rem.length)) {
cmp = dvsL > remL ? 1 : -1;
} else {
// If both are 0, throw NaN
if (dvd[0] == dvs[0]) throw Error(bigError + NaN);
for (remI = -1, cmp = 0; ++remI < dvsL;) {
// If dvs is 0, throw +-Infinity.
if (!dvs[0]) throw Error(bigError + s / 0);
if (dvs[remI] != rem[remI]) {
cmp = dvs[remI] > rem[remI] ? 1 : -1;
break;
}
}
}
// dvd is 0, return +-0.
return new Big(s * 0);
}
// If divisor < remainder, subtract divisor from remainder.
if (cmp < 0) {
var dvsL, dvsT, next, cmp, remI,
dvsZ = dvs.slice(),
dvdI = dvsL = dvs.length,
dvdL = dvd.length,
rem = dvd.slice(0, dvsL), // remainder
remL = rem.length,
q = y, // quotient
qc = q.c = [],
qi = 0,
digits = dp + (q.e = x.e - y.e) + 1;
// Remainder can't be more than 1 digit longer than divisor.
// Equalise lengths using divisor with extra leading zero?
for (dvsT = remL == dvsL ? dvs : dvsZ; remL;) {
q.s = s;
s = digits < 0 ? 0 : digits;
if (rem[--remL] < dvsT[remL]) {
remI = remL;
// Create version of divisor with leading zero.
dvsZ.unshift(0);
for (; remI && !rem[--remI]; rem[remI] = 9) {
}
--rem[remI];
rem[remL] += 10;
}
rem[remL] -= dvsT[remL];
}
for (; !rem[0]; rem.shift()) {
}
} else {
break;
}
}
// Add zeros to make remainder as long as divisor.
for (; remL++ < dvsL;) rem.push(0);
// Add the 'next' digit to the result array.
qc[qi++] = cmp ? next : ++next;
do {
// Update the remainder.
if (rem[0] && cmp) {
rem[remL] = dvd[dvdI] || 0;
} else {
rem = [ dvd[dvdI] ];
// 'next' is how many times the divisor goes into current remainder.
for (next = 0; next < 10; next++) {
// Compare divisor and remainder.
if (dvsL != (remL = rem.length)) {
cmp = dvsL > remL ? 1 : -1;
} else {
for (remI = -1, cmp = 0; ++remI < dvsL;) {
if (dvs[remI] != rem[remI]) {
cmp = dvs[remI] > rem[remI] ? 1 : -1;
break;
}
}
}
} while ((dvdI++ < dvdL || rem[0] !== u) && s--);
// If divisor < remainder, subtract divisor from remainder.
if (cmp < 0) {
// Leading zero? Do not remove if result is simply zero (qi == 1).
if (!qc[0] && qi != 1) {
// Remainder can't be more than 1 digit longer than divisor.
// Equalise lengths using divisor with extra leading zero?
for (dvsT = remL == dvsL ? dvs : dvsZ; remL;) {
if (rem[--remL] < dvsT[remL]) {
remI = remL;
for (; remI && !rem[--remI];) rem[remI] = 9;
--rem[remI];
rem[remL] += 10;
}
// There can't be more than one zero.
qc.shift();
q.e--;
}
rem[remL] -= dvsT[remL];
}
// Round?
if (qi > digits) {
rnd(q, dp, Big.RM, rem[0] !== u);
for (; !rem[0];) rem.shift();
} else {
break;
}
}
return q;
};
// Add the 'next' digit to the result array.
qc[qi++] = cmp ? next : ++next;
// Update the remainder.
if (rem[0] && cmp) rem[remL] = dvd[dvdI] || 0;
else rem = [dvd[dvdI]];
/*
* Return true if the value of this Big is equal to the value of Big y,
* otherwise returns false.
*/
P.eq = function (y) {
return !this.cmp(y);
};
} while ((dvdI++ < dvdL || rem[0] !== undef) && s--);
// Leading zero? Do not remove if result is simply zero (qi == 1).
if (!qc[0] && qi != 1) {
/*
* Return true if the value of this Big is greater than the value of Big y,
* otherwise returns false.
*/
P.gt = function (y) {
return this.cmp(y) > 0;
};
// There can't be more than one zero.
qc.shift();
q.e--;
}
// Round?
if (qi > digits) rnd(q, dp, Big.RM, rem[0] !== undef);
/*
* Return true if the value of this Big is greater than or equal to the
* value of Big y, otherwise returns false.
*/
P.gte = function (y) {
return this.cmp(y) > -1;
};
return q;
};
/*
* Return true if the value of this Big is less than the value of Big y,
* otherwise returns false.
*/
P.lt = function (y) {
return this.cmp(y) < 0;
};
/*
* Return true if the value of this Big is equal to the value of Big y, otherwise return false.
*/
P.eq = function (y) {
return !this.cmp(y);
};
/*
* Return true if the value of this Big is less than or equal to the value
* of Big y, otherwise returns false.
*/
P.lte = function (y) {
return this.cmp(y) < 1;
};
/*
* Return true if the value of this Big is greater than the value of Big y, otherwise return
* false.
*/
P.gt = function (y) {
return this.cmp(y) > 0;
};
/*
* Return a new Big whose value is the value of this Big minus the value
* of Big y.
*/
P.sub = P.minus = function (y) {
var i, j, t, xLTy,
x = this,
Big = x.constructor,
a = x.s,
b = (y = new Big(y)).s;
/*
* Return true if the value of this Big is greater than or equal to the value of Big y, otherwise
* return false.
*/
P.gte = function (y) {
return this.cmp(y) > -1;
};
// Signs differ?
if (a != b) {
y.s = -b;
return x.plus(y);
}
var xc = x.c.slice(),
xe = x.e,
yc = y.c,
ye = y.e;
/*
* Return true if the value of this Big is less than the value of Big y, otherwise return false.
*/
P.lt = function (y) {
return this.cmp(y) < 0;
};
// Either zero?
if (!xc[0] || !yc[0]) {
// y is non-zero? x is non-zero? Or both are zero.
return yc[0] ? (y.s = -b, y) : new Big(xc[0] ? x : 0);
}
/*
* Return true if the value of this Big is less than or equal to the value of Big y, otherwise
* return false.
*/
P.lte = function (y) {
return this.cmp(y) < 1;
};
// Determine which is the bigger number.
// Prepend zeros to equalise exponents.
if (a = xe - ye) {
if (xLTy = a < 0) {
a = -a;
t = xc;
} else {
ye = xe;
t = yc;
}
/*
* Return a new Big whose value is the value of this Big minus the value of Big y.
*/
P.sub = P.minus = function (y) {
var i, j, t, xLTy,
x = this,
Big = x.constructor,
a = x.s,
b = (y = new Big(y)).s;
t.reverse();
for (b = a; b--; t.push(0)) {
}
t.reverse();
} else {
// Signs differ?
if (a != b) {
y.s = -b;
return x.plus(y);
}
// Exponents equal. Check digit by digit.
j = ((xLTy = xc.length < yc.length) ? xc : yc).length;
var xc = x.c.slice(),
xe = x.e,
yc = y.c,
ye = y.e;
for (a = b = 0; b < j; b++) {
// Either zero?
if (!xc[0] || !yc[0]) {
if (xc[b] != yc[b]) {
xLTy = xc[b] < yc[b];
break;
}
}
}
// y is non-zero? x is non-zero? Or both are zero.
return yc[0] ? (y.s = -b, y) : new Big(xc[0] ? x : 0);
}
// x < y? Point xc to the array of the bigger number.
if (xLTy) {
t = xc;
xc = yc;
yc = t;
y.s = -y.s;
}
// Determine which is the bigger number. Prepend zeros to equalise exponents.
if (a = xe - ye) {
/*
* Append zeros to xc if shorter. No need to add zeros to yc if shorter
* as subtraction only needs to start at yc.length.
*/
if (( b = (j = yc.length) - (i = xc.length) ) > 0) {
if (xLTy = a < 0) {
a = -a;
t = xc;
} else {
ye = xe;
t = yc;
}
for (; b--; xc[i++] = 0) {
}
}
t.reverse();
for (b = a; b--;) t.push(0);
t.reverse();
} else {
// Subtract yc from xc.
for (b = i; j > a;){
// Exponents equal. Check digit by digit.
j = ((xLTy = xc.length < yc.length) ? xc : yc).length;
if (xc[--j] < yc[j]) {
for (i = j; i && !xc[--i]; xc[i] = 9) {
}
--xc[i];
xc[j] += 10;
}
xc[j] -= yc[j];
for (a = b = 0; b < j; b++) {
if (xc[b] != yc[b]) {
xLTy = xc[b] < yc[b];
break;
}
}
}
// Remove trailing zeros.
for (; xc[--b] === 0; xc.pop()) {
}
// x < y? Point xc to the array of the bigger number.
if (xLTy) {
t = xc;
xc = yc;
yc = t;
y.s = -y.s;
}
// Remove leading zeros and adjust exponent accordingly.
for (; xc[0] === 0;) {
xc.shift();
--ye;
}
if (!xc[0]) {
// n - n = +0
y.s = 1;
// Result must be zero.
xc = [ye = 0];
}
y.c = xc;
y.e = ye;
return y;
};
/*
* Return a new Big whose value is the value of this Big modulo the
* value of Big y.
* Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only
* needs to start at yc.length.
*/
P.mod = function (y) {
var yGTx,
x = this,
Big = x.constructor,
a = x.s,
b = (y = new Big(y)).s;
if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;
if (!y.c[0]) {
throwErr(NaN);
}
// Subtract yc from xc.
for (b = i; j > a;) {
if (xc[--j] < yc[j]) {
for (i = j; i && !xc[--i];) xc[i] = 9;
--xc[i];
xc[j] += 10;
}
x.s = y.s = 1;
yGTx = y.cmp(x) == 1;
x.s = a;
y.s = b;
xc[j] -= yc[j];
}
if (yGTx) {
return new Big(x);
}
// Remove trailing zeros.
for (; xc[--b] === 0;) xc.pop();
a = Big.DP;
b = Big.RM;
Big.DP = Big.RM = 0;
x = x.div(y);
Big.DP = a;
Big.RM = b;
// Remove leading zeros and adjust exponent accordingly.
for (; xc[0] === 0;) {
xc.shift();
--ye;
}
return this.minus( x.times(y) );
};
if (!xc[0]) {
// n - n = +0
y.s = 1;
/*
* Return a new Big whose value is the value of this Big plus the value
* of Big y.
*/
P.add = P.plus = function (y) {
var t,
x = this,
Big = x.constructor,
a = x.s,
b = (y = new Big(y)).s;
// Result must be zero.
xc = [ye = 0];
}
// Signs differ?
if (a != b) {
y.s = -b;
return x.minus(y);
}
y.c = xc;
y.e = ye;
var xe = x.e,
xc = x.c,
ye = y.e,
yc = y.c;
return y;
};
// Either zero?
if (!xc[0] || !yc[0]) {
// y is non-zero? x is non-zero? Or both are zero.
return yc[0] ? y : new Big(xc[0] ? x : a * 0);
}
xc = xc.slice();
/*
* Return a new Big whose value is the value of this Big modulo the value of Big y.
*/
P.mod = function (y) {
var yGTx,
x = this,
Big = x.constructor,
a = x.s,
b = (y = new Big(y)).s;
// Prepend zeros to equalise exponents.
// Note: Faster to use reverse then do unshifts.
if (a = xe - ye) {
if (!y.c[0]) throw Error(bigError + NaN);
x.s = y.s = 1;
yGTx = y.cmp(x) == 1;
x.s = a;
y.s = b;
if (a > 0) {
ye = xe;
t = yc;
} else {
a = -a;
t = xc;
}
if (yGTx) return new Big(x);
t.reverse();
for (; a--; t.push(0)) {
}
t.reverse();
}
a = Big.DP;
b = Big.RM;
Big.DP = Big.RM = 0;
x = x.div(y);
Big.DP = a;
Big.RM = b;
// Point xc to the longer array.
if (xc.length - yc.length < 0) {
t = yc;
yc = xc;
xc = t;
}
a = yc.length;
return this.minus(x.times(y));
};
/*
* Only start adding at yc.length - 1 as the further digits of xc can be
* left as they are.
*/
for (b = 0; a;) {
b = (xc[--a] = xc[a] + yc[a] + b) / 10 | 0;
xc[a] %= 10;
}
// No need to check for zero, as +x + +y != 0 && -x + -y != 0
/*
* Return a new Big whose value is the value of this Big plus the value of Big y.
*/
P.add = P.plus = function (y) {
var t,
x = this,
Big = x.constructor,
a = x.s,
b = (y = new Big(y)).s;
if (b) {
xc.unshift(b);
++ye;
}
// Signs differ?
if (a != b) {
y.s = -b;
return x.minus(y);
}
// Remove trailing zeros.
for (a = xc.length; xc[--a] === 0; xc.pop()) {
}
var xe = x.e,
xc = x.c,
ye = y.e,
yc = y.c;
y.c = xc;
y.e = ye;
// Either zero? y is non-zero? x is non-zero? Or both are zero.
if (!xc[0] || !yc[0]) return yc[0] ? y : new Big(xc[0] ? x : a * 0);
return y;
};
xc = xc.slice();
// Prepend zeros to equalise exponents.
// Note: Faster to use reverse then do unshifts.
if (a = xe - ye) {
if (a > 0) {
ye = xe;
t = yc;
} else {
a = -a;
t = xc;
}
/*
* Return a Big whose value is the value of this Big raised to the power n.
* If n is negative, round, if necessary, to a maximum of Big.DP decimal
* places using rounding mode Big.RM.
*
* n {number} Integer, -MAX_POWER to MAX_POWER inclusive.
*/
P.pow = function (n) {
var x = this,
one = new x.constructor(1),
y = one,
isNeg = n < 0;
t.reverse();
for (; a--;) t.push(0);
t.reverse();
}
if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {
throwErr('!pow!');
}
// Point xc to the longer array.
if (xc.length - yc.length < 0) {
t = yc;
yc = xc;
xc = t;
}
n = isNeg ? -n : n;
a = yc.length;
for (;;) {
// Only start adding at yc.length - 1 as the further digits of xc can be left as they are.
for (b = 0; a; xc[a] %= 10) b = (xc[--a] = xc[a] + yc[a] + b) / 10 | 0;
if (n & 1) {
y = y.times(x);
}
n >>= 1;
// No need to check for zero, as +x + +y != 0 && -x + -y != 0
if (!n) {
break;
}
x = x.times(x);
}
if (b) {
xc.unshift(b);
++ye;
}
return isNeg ? one.div(y) : y;
};
// Remove trailing zeros.
for (a = xc.length; xc[--a] === 0;) xc.pop();
y.c = xc;
y.e = ye;
/*
* Return a new Big whose value is the value of this Big rounded to a
* maximum of dp decimal places using rounding mode rm.
* If dp is not specified, round to 0 decimal places.
* If rm is not specified, use Big.RM.
*
* [dp] {number} Integer, 0 to MAX_DP inclusive.
* [rm] 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP)
*/
P.round = function (dp, rm) {
var x = this,
Big = x.constructor;
return y;
};
if (dp == null) {
dp = 0;
} else if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {
throwErr('!round!');
}
rnd(x = new Big(x), dp, rm == null ? Big.RM : rm);
return x;
};
/*
* Return a Big whose value is the value of this Big raised to the power n.
* If n is negative, round, if necessary, to a maximum of Big.DP decimal places using rounding
* mode Big.RM.
*
* n {number} Integer, -MAX_POWER to MAX_POWER inclusive.
*/
P.pow = function (n) {
var x = this,
one = new x.constructor(1),
y = one,
isNeg = n < 0;
if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) throw Error(bigError + n);
n = isNeg ? -n : n;
/*
* Return a new Big whose value is the square root of the value of this Big,
* rounded, if necessary, to a maximum of Big.DP decimal places using
* rounding mode Big.RM.
*/
P.sqrt = function () {
var estimate, r, approx,
x = this,
Big = x.constructor,
xc = x.c,
i = x.s,
e = x.e,
half = new Big('0.5');
for (;;) {
if (n & 1) y = y.times(x);
n >>= 1;
if (!n) break;
x = x.times(x);
}
// Zero?
if (!xc[0]) {
return new Big(x);
}
return isNeg ? one.div(y) : y;
};
// If negative, throw NaN.
if (i < 0) {
throwErr(NaN);
}
// Estimate.
i = Math.sqrt(x.toString());
/*
* Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal
* places using rounding mode rm.
* If dp is not specified, round to 0 decimal places.
* If rm is not specified, use Big.RM.
*
* [dp] {number} Integer, 0 to MAX_DP inclusive.
* [rm] 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP)
*/
P.round = function (dp, rm) {
var x = this,
Big = x.constructor;
// Math.sqrt underflow/overflow?
// Pass x to Math.sqrt as integer, then adjust the result exponent.
if (i === 0 || i === 1 / 0) {
estimate = xc.join('');
if (dp === undef) dp = 0;
else if (dp !== ~~dp || dp < 0 || dp > MAX_DP) throw Error(bigError + dp);
if (!(estimate.length + e & 1)) {
estimate += '0';
}
return rnd(new Big(x), dp, rm === undef ? Big.RM : rm);
};
r = new Big( Math.sqrt(estimate).toString() );
r.e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);
} else {
r = new Big(i.toString());
}
i = r.e + (Big.DP += 4);
/*
* Return a new Big whose value is the square root of the value of this Big, rounded, if
* necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.
*/
P.sqrt = function () {
var estimate, r, approx,
x = this,
Big = x.constructor,
xc = x.c,
i = x.s,
e = x.e,
half = new Big('0.5');
// Newton-Raphson iteration.
do {
approx = r;
r = half.times( approx.plus( x.div(approx) ) );
} while ( approx.c.slice(0, i).join('') !==
r.c.slice(0, i).join('') );
// Zero?
if (!xc[0]) return new Big(x);
rnd(r, Big.DP -= 4, Big.RM);
// If negative, throw NaN.
if (i < 0) throw Error(bigError + NaN);
return r;
};
// Estimate.
i = Math.sqrt(x.toString());
// Math.sqrt underflow/overflow?
// Pass x to Math.sqrt as integer, then adjust the result exponent.
if (i === 0 || i === 1 / 0) {
estimate = xc.join('');
if (!(estimate.length + e & 1)) estimate += '0';
r = new Big(Math.sqrt(estimate).toString());
r.e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);
} else {
r = new Big(i.toString());
}
/*
* Return a new Big whose value is the value of this Big times the value of
* Big y.
*/
P.mul = P.times = function (y) {
var c,
x = this,
Big = x.constructor,
xc = x.c,
yc = (y = new Big(y)).c,
a = xc.length,
b = yc.length,
i = x.e,
j = y.e;
i = r.e + (Big.DP += 4);
// Determine sign of result.
y.s = x.s == y.s ? 1 : -1;
// Newton-Raphson iteration.
do {
approx = r;
r = half.times(approx.plus(x.div(approx)));
} while (approx.c.slice(0, i).join('') !== r.c.slice(0, i).join(''));
// Return signed 0 if either 0.
if (!xc[0] || !yc[0]) {
return new Big(y.s * 0);
}
return rnd(r, Big.DP -= 4, Big.RM);
};
// Initialise exponent of result as x.e + y.e.
y.e = i + j;
// If array xc has fewer digits than yc, swap xc and yc, and lengths.
if (a < b) {
c = xc;
xc = yc;
yc = c;
j = a;
a = b;
b = j;
}
/*
* Return a new Big whose value is the value of this Big times the value of Big y.
*/
P.mul = P.times = function (y) {
var c,
x = this,
Big = x.constructor,
xc = x.c,
yc = (y = new Big(y)).c,
a = xc.length,
b = yc.length,
i = x.e,
j = y.e;
// Initialise coefficient array of result with zeros.
for (c = new Array(j = a + b); j--; c[j] = 0) {
}
// Determine sign of result.
y.s = x.s == y.s ? 1 : -1;
// Multiply.
// Return signed 0 if either 0.
if (!xc[0] || !yc[0]) return new Big(y.s * 0);
// i is initially xc.length.
for (i = b; i--;) {
b = 0;
// Initialise exponent of result as x.e + y.e.
y.e = i + j;
// a is yc.length.
for (j = a + i; j > i;) {
// If array xc has fewer digits than yc, swap xc and yc, and lengths.
if (a < b) {
c = xc;
xc = yc;
yc = c;
j = a;
a = b;
b = j;
}
// Current sum of products at this digit position, plus carry.
b = c[j] + yc[i] * xc[j - i - 1] + b;
c[j--] = b % 10;
// Initialise coefficient array of result with zeros.
for (c = new Array(j = a + b); j--;) c[j] = 0;
// carry
b = b / 10 | 0;
}
c[j] = (c[j] + b) % 10;
}
// Multiply.
// Increment result exponent if there is a final carry.
if (b) {
++y.e;
}
// i is initially xc.length.
for (i = b; i--;) {
b = 0;
// Remove any leading zero.
if (!c[0]) {
c.shift();
}
// a is yc.length.
for (j = a + i; j > i;) {
// Remove trailing zeros.
for (i = c.length; !c[--i]; c.pop()) {
}
y.c = c;
// Current sum of products at this digit position, plus carry.
b = c[j] + yc[i] * xc[j - i - 1] + b;
c[j--] = b % 10;
return y;
};
// carry
b = b / 10 | 0;
}
c[j] = (c[j] + b) % 10;
}
/*
* Return a string representing the value of this Big.
* Return exponential notation if this Big has a positive exponent equal to
* or greater than Big.E_POS, or a negative exponent equal to or less than
* Big.E_NEG.
*/
P.toString = P.valueOf = P.toJSON = function () {
var x = this,
Big = x.constructor,
e = x.e,
str = x.c.join(''),
strL = str.length;
// Increment result exponent if there is a final carry, otherwise remove leading zero.
if (b) ++y.e;
else c.shift();
// Exponential notation?
if (e <= Big.E_NEG || e >= Big.E_POS) {
str = str.charAt(0) + (strL > 1 ? '.' + str.slice(1) : '') +
(e < 0 ? 'e' : 'e+') + e;
// Remove trailing zeros.
for (i = c.length; !c[--i];) c.pop();
y.c = c;
// Negative exponent?
} else if (e < 0) {
return y;
};
// Prepend zeros.
for (; ++e; str = '0' + str) {
}
str = '0.' + str;
// Positive exponent?
} else if (e > 0) {
/*
* Return a string representing the value of this Big.
* Return exponential notation if this Big has a positive exponent equal to or greater than
* Big.PE, or a negative exponent equal to or less than Big.NE.
*/
P.toString = P.valueOf = P.toJSON = function () {
var x = this,
Big = x.constructor,
e = x.e,
str = x.c.join(''),
strL = str.length;
if (++e > strL) {
// Exponential notation?
if (e <= Big.NE || e >= Big.PE) {
str = str.charAt(0) + (strL > 1 ? '.' + str.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;
} else if (e < 0) {
for (; ++e;) str = '0' + str;
str = '0.' + str;
} else if (e > 0) {
if (++e > strL) for (e -= strL; e--;) str += '0';
else if (e < strL) str = str.slice(0, e) + '.' + str.slice(e);
// Append zeros.
for (e -= strL; e-- ; str += '0') {
}
} else if (e < strL) {
str = str.slice(0, e) + '.' + str.slice(e);
}
// Exponent is zero.
} else if (strL > 1) {
str = str.charAt(0) + '.' + str.slice(1);
}
// Exponent zero.
} else if (strL > 1) {
str = str.charAt(0) + '.' + str.slice(1);
}
// Avoid '-0'
return x.s < 0 && x.c[0] ? '-' + str : str;
};
// Avoid '-0'
return x.s < 0 && x.c[0] ? '-' + str : str;
};
/*
* If toExponential, toFixed, toPrecision and format are not required they can safely be
* commented-out or deleted. No redundant code will be left.
* The format function is used only by toExponential, toFixed and toPrecision.
*/
/*
***************************************************************************
* If toExponential, toFixed, toPrecision and format are not required they
* can safely be commented-out or deleted. No redundant code will be left.
* format is used only by toExponential, toFixed and toPrecision.
***************************************************************************
*/
/*
* Return a string representing the value of this Big in exponential notation to dp fixed decimal
* places and rounded, if necessary, using Big.RM.
*
* [dp] {number} Integer, 0 to MAX_DP inclusive.
*/
P.toExponential = function (dp) {
if (dp === undef) dp = this.c.length - 1;
else if (dp !== ~~dp || dp < 0 || dp > MAX_DP) throw Error(bigError + dp);
return format(this, dp, 1);
};
/*
* Return a string representing the value of this Big in exponential
* notation to dp fixed decimal places and rounded, if necessary, using
* Big.RM.
*
* [dp] {number} Integer, 0 to MAX_DP inclusive.
*/
P.toExponential = function (dp) {
if (dp == null) {
dp = this.c.length - 1;
} else if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {
throwErr('!toExp!');
}
/*
* Return a string representing the value of this Big in normal notation to dp fixed decimal
* places and rounded, if necessary, using Big.RM.
*
* [dp] {number} Integer, 0 to MAX_DP inclusive.
*/
P.toFixed = function (dp) {
var str,
x = this,
Big = x.constructor,
ne = Big.NE,
pe = Big.PE;
return format(this, dp, 1);
};
// Prevent the possibility of exponential notation.
Big.NE = -(Big.PE = 1 / 0);
if (dp === undef) {
str = x.toString();
} else if (dp === ~~dp && dp >= 0 && dp <= MAX_DP) {
str = format(x, x.e + dp);
/*
* Return a string representing the value of this Big in normal notation
* to dp fixed decimal places and rounded, if necessary, using Big.RM.
*
* [dp] {number} Integer, 0 to MAX_DP inclusive.
*/
P.toFixed = function (dp) {
var str,
x = this,
Big = x.constructor,
neg = Big.E_NEG,
pos = Big.E_POS;
// (-0).toFixed() is '0', but (-0.1).toFixed() is '-0'.
// (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.
if (x.s < 0 && x.c[0] && str.indexOf('-') < 0) {
// Prevent the possibility of exponential notation.
Big.E_NEG = -(Big.E_POS = 1 / 0);
if (dp == null) {
str = x.toString();
} else if (dp === ~~dp && dp >= 0 && dp <= MAX_DP) {
str = format(x, x.e + dp);
// (-0).toFixed() is '0', but (-0.1).toFixed() is '-0'.
// (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.
if (x.s < 0 && x.c[0] && str.indexOf('-') < 0) {
//E.g. -0.5 if rounded to -0 will cause toString to omit the minus sign.
str = '-' + str;
}
}
Big.E_NEG = neg;
Big.E_POS = pos;
str = '-' + str;
}
}
if (!str) {
throwErr('!toFix!');
}
Big.NE = ne;
Big.PE = pe;
return str;
};
if (!str) throw Error(bigError + dp);
return str;
};
/*
* Return a string representing the value of this Big rounded to sd
* significant digits using Big.RM. Use exponential notation if sd is less
* than the number of digits necessary to represent the integer part of the
* value in normal notation.
*
* sd {number} Integer, 1 to MAX_DP inclusive.
*/
P.toPrecision = function (sd) {
if (sd == null) {
return this.toString();
} else if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {
throwErr('!toPre!');
}
/*
* Return a string representing the value of this Big rounded to sd significant digits using
* Big.RM. Use exponential notation if sd is less than the number of digits necessary to represent
* the integer part of the value in normal notation.
*
* sd {number} Integer, 1 to MAX_DP inclusive.
*/
P.toPrecision = function (sd) {
if (sd === undef) return this.toString();
else if (sd !== ~~sd || sd < 1 || sd > MAX_DP) throw Error(bigError + sd);
return format(this, sd - 1, 2);
};
return format(this, sd - 1, 2);
};
// Export
// Export
Big = bigFactory();
Big = bigFactory();
Big['default'] = Big.Big = Big;
//AMD.
if (typeof define === 'function' && define.amd) {
define(function () {
return Big;
});
//AMD.
if (typeof define === 'function' && define.amd) {
define(function () { return Big; });
// Node and other CommonJS-like environments that support module.exports.
} else if (typeof module !== 'undefined' && module.exports) {
module.exports = Big;
module.exports.Big = Big;
// Node and other CommonJS-like environments that support module.exports.
} else if (typeof module !== 'undefined' && module.exports) {
module.exports = Big;
//Browser.
} else {
global.Big = Big;
}
//Browser.
} else {
global.Big = Big;
}
})(this);

@@ -1,3 +0,3 @@

/* big.js v3.2.0 https://github.com/MikeMcl/big.js/LICENCE */
!function(e){"use strict";function t(){function e(r){var i=this;return i instanceof e?(r instanceof e?(i.s=r.s,i.e=r.e,i.c=r.c.slice()):n(i,r),void(i.constructor=e)):void 0===r?t():new e(r)}return e.prototype=g,e.DP=c,e.RM=u,e.E_NEG=l,e.E_POS=a,e}function r(e,t,r){var n=e.constructor,s=t-(e=new n(e)).e,o=e.c;for(o.length>++t&&i(e,s,n.RM),o[0]?r?s=t:(o=e.c,s=e.e+s+1):++s;o.length<s;o.push(0));return s=e.e,1===r||r&&(s>=t||s<=n.E_NEG)?(e.s<0&&o[0]?"-":"")+(o.length>1?o[0]+"."+o.join("").slice(1):o[0])+(0>s?"e":"e+")+s:e.toString()}function n(e,t){var r,n,i;for(0===t&&0>1/t?t="-0":p.test(t+="")||s(NaN),e.s="-"==t.charAt(0)?(t=t.slice(1),-1):1,(r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(0>r&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):0>r&&(r=t.length),i=t.length,n=0;i>n&&"0"==t.charAt(n);n++);if(n==i)e.c=[e.e=0];else{for(;i>0&&"0"==t.charAt(--i););for(e.e=r-n-1,e.c=[];i>=n;e.c.push(+t.charAt(n++)));}return e}function i(e,t,r,n){var i,o=e.c,c=e.e+t+1;if(1===r?n=o[c]>=5:2===r?n=o[c]>5||5==o[c]&&(n||0>c||o[c+1]!==i||1&o[c-1]):3===r?n=n||o[c]!==i||0>c:(n=!1,0!==r&&s("!Big.RM!")),1>c||!o[0])n?(e.e=-t,e.c=[1]):e.c=[e.e=0];else{if(o.length=c--,n)for(;++o[c]>9;)o[c]=0,c--||(++e.e,o.unshift(1));for(c=o.length;!o[--c];o.pop());}return e}function s(e){var t=new Error(e);throw t.name="BigError",t}var o,c=20,u=1,f=1e6,h=1e6,l=-7,a=21,g={},p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;g.abs=function(){var e=new this.constructor(this);return e.s=1,e},g.cmp=function(e){var t,r=this,n=r.c,i=(e=new r.constructor(e)).c,s=r.s,o=e.s,c=r.e,u=e.e;if(!n[0]||!i[0])return n[0]?s:i[0]?-o:0;if(s!=o)return s;if(t=0>s,c!=u)return c>u^t?1:-1;for(s=-1,o=(c=n.length)<(u=i.length)?c:u;++s<o;)if(n[s]!=i[s])return n[s]>i[s]^t?1:-1;return c==u?0:c>u^t?1:-1},g.div=function(e){var t=this,r=t.constructor,n=t.c,o=(e=new r(e)).c,c=t.s==e.s?1:-1,u=r.DP;if((u!==~~u||0>u||u>f)&&s("!Big.DP!"),!n[0]||!o[0])return n[0]==o[0]&&s(NaN),o[0]||s(c/0),new r(0*c);var h,l,a,g,p,v,d=o.slice(),w=h=o.length,m=n.length,E=n.slice(0,h),N=E.length,P=e,S=P.c=[],M=0,_=u+(P.e=t.e-e.e)+1;for(P.s=c,c=0>_?0:_,d.unshift(0);N++<h;E.push(0));do{for(a=0;10>a;a++){if(h!=(N=E.length))g=h>N?1:-1;else for(p=-1,g=0;++p<h;)if(o[p]!=E[p]){g=o[p]>E[p]?1:-1;break}if(!(0>g))break;for(l=N==h?o:d;N;){if(E[--N]<l[N]){for(p=N;p&&!E[--p];E[p]=9);--E[p],E[N]+=10}E[N]-=l[N]}for(;!E[0];E.shift());}S[M++]=g?a:++a,E[0]&&g?E[N]=n[w]||0:E=[n[w]]}while((w++<m||E[0]!==v)&&c--);return S[0]||1==M||(S.shift(),P.e--),M>_&&i(P,u,r.RM,E[0]!==v),P},g.eq=function(e){return!this.cmp(e)},g.gt=function(e){return this.cmp(e)>0},g.gte=function(e){return this.cmp(e)>-1},g.lt=function(e){return this.cmp(e)<0},g.lte=function(e){return this.cmp(e)<1},g.sub=g.minus=function(e){var t,r,n,i,s=this,o=s.constructor,c=s.s,u=(e=new o(e)).s;if(c!=u)return e.s=-u,s.plus(e);var f=s.c.slice(),h=s.e,l=e.c,a=e.e;if(!f[0]||!l[0])return l[0]?(e.s=-u,e):new o(f[0]?s:0);if(c=h-a){for((i=0>c)?(c=-c,n=f):(a=h,n=l),n.reverse(),u=c;u--;n.push(0));n.reverse()}else for(r=((i=f.length<l.length)?f:l).length,c=u=0;r>u;u++)if(f[u]!=l[u]){i=f[u]<l[u];break}if(i&&(n=f,f=l,l=n,e.s=-e.s),(u=(r=l.length)-(t=f.length))>0)for(;u--;f[t++]=0);for(u=t;r>c;){if(f[--r]<l[r]){for(t=r;t&&!f[--t];f[t]=9);--f[t],f[r]+=10}f[r]-=l[r]}for(;0===f[--u];f.pop());for(;0===f[0];)f.shift(),--a;return f[0]||(e.s=1,f=[a=0]),e.c=f,e.e=a,e},g.mod=function(e){var t,r=this,n=r.constructor,i=r.s,o=(e=new n(e)).s;return e.c[0]||s(NaN),r.s=e.s=1,t=1==e.cmp(r),r.s=i,e.s=o,t?new n(r):(i=n.DP,o=n.RM,n.DP=n.RM=0,r=r.div(e),n.DP=i,n.RM=o,this.minus(r.times(e)))},g.add=g.plus=function(e){var t,r=this,n=r.constructor,i=r.s,s=(e=new n(e)).s;if(i!=s)return e.s=-s,r.minus(e);var o=r.e,c=r.c,u=e.e,f=e.c;if(!c[0]||!f[0])return f[0]?e:new n(c[0]?r:0*i);if(c=c.slice(),i=o-u){for(i>0?(u=o,t=f):(i=-i,t=c),t.reverse();i--;t.push(0));t.reverse()}for(c.length-f.length<0&&(t=f,f=c,c=t),i=f.length,s=0;i;)s=(c[--i]=c[i]+f[i]+s)/10|0,c[i]%=10;for(s&&(c.unshift(s),++u),i=c.length;0===c[--i];c.pop());return e.c=c,e.e=u,e},g.pow=function(e){var t=this,r=new t.constructor(1),n=r,i=0>e;for((e!==~~e||-h>e||e>h)&&s("!pow!"),e=i?-e:e;1&e&&(n=n.times(t)),e>>=1,e;)t=t.times(t);return i?r.div(n):n},g.round=function(e,t){var r=this,n=r.constructor;return null==e?e=0:(e!==~~e||0>e||e>f)&&s("!round!"),i(r=new n(r),e,null==t?n.RM:t),r},g.sqrt=function(){var e,t,r,n=this,o=n.constructor,c=n.c,u=n.s,f=n.e,h=new o("0.5");if(!c[0])return new o(n);0>u&&s(NaN),u=Math.sqrt(n.toString()),0===u||u===1/0?(e=c.join(""),e.length+f&1||(e+="0"),t=new o(Math.sqrt(e).toString()),t.e=((f+1)/2|0)-(0>f||1&f)):t=new o(u.toString()),u=t.e+(o.DP+=4);do r=t,t=h.times(r.plus(n.div(r)));while(r.c.slice(0,u).join("")!==t.c.slice(0,u).join(""));return i(t,o.DP-=4,o.RM),t},g.mul=g.times=function(e){var t,r=this,n=r.constructor,i=r.c,s=(e=new n(e)).c,o=i.length,c=s.length,u=r.e,f=e.e;if(e.s=r.s==e.s?1:-1,!i[0]||!s[0])return new n(0*e.s);for(e.e=u+f,c>o&&(t=i,i=s,s=t,f=o,o=c,c=f),t=new Array(f=o+c);f--;t[f]=0);for(u=c;u--;){for(c=0,f=o+u;f>u;)c=t[f]+s[u]*i[f-u-1]+c,t[f--]=c%10,c=c/10|0;t[f]=(t[f]+c)%10}for(c&&++e.e,t[0]||t.shift(),u=t.length;!t[--u];t.pop());return e.c=t,e},g.toString=g.valueOf=g.toJSON=function(){var e=this,t=e.constructor,r=e.e,n=e.c.join(""),i=n.length;if(r<=t.E_NEG||r>=t.E_POS)n=n.charAt(0)+(i>1?"."+n.slice(1):"")+(0>r?"e":"e+")+r;else if(0>r){for(;++r;n="0"+n);n="0."+n}else if(r>0)if(++r>i)for(r-=i;r--;n+="0");else i>r&&(n=n.slice(0,r)+"."+n.slice(r));else i>1&&(n=n.charAt(0)+"."+n.slice(1));return e.s<0&&e.c[0]?"-"+n:n},g.toExponential=function(e){return null==e?e=this.c.length-1:(e!==~~e||0>e||e>f)&&s("!toExp!"),r(this,e,1)},g.toFixed=function(e){var t,n=this,i=n.constructor,o=i.E_NEG,c=i.E_POS;return i.E_NEG=-(i.E_POS=1/0),null==e?t=n.toString():e===~~e&&e>=0&&f>=e&&(t=r(n,n.e+e),n.s<0&&n.c[0]&&t.indexOf("-")<0&&(t="-"+t)),i.E_NEG=o,i.E_POS=c,t||s("!toFix!"),t},g.toPrecision=function(e){return null==e?this.toString():((e!==~~e||1>e||e>f)&&s("!toPre!"),r(this,e-1,2))},o=t(),"function"==typeof define&&define.amd?define(function(){return o}):"undefined"!=typeof module&&module.exports?(module.exports=o,module.exports.Big=o):e.Big=o}(this);
/* big.js v4.0.0 https://github.com/MikeMcl/big.js/LICENCE */
!function(r){"use strict";function e(){function r(t){var i=this;return i instanceof r?(t instanceof r?(i.s=t.s,i.e=t.e,i.c=t.c.slice()):n(i,t),void(i.constructor=r)):t===p?e():new r(t)}return r.prototype=a,r.DP=s,r.RM=f,r.NE=h,r.PE=l,r}function t(r,e,t){var n=r.constructor,o=e-(r=new n(r)).e,s=r.c;for(s.length>++e&&i(r,o,n.RM),s[0]?t?o=e:(s=r.c,o=r.e+o+1):++o;s.length<o;)s.push(0);return o=r.e,1===t||t&&(o>=e||o<=n.NE)?(r.s<0&&s[0]?"-":"")+(s.length>1?s[0]+"."+s.join("").slice(1):s[0])+(0>o?"e":"e+")+o:r.toString()}function n(r,e){var t,n,i;if(0===e&&0>1/e)e="-0";else if(!g.test(e+=""))throw Error(w+NaN);for(r.s="-"==e.charAt(0)?(e=e.slice(1),-1):1,(t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(0>t&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):0>t&&(t=e.length),i=e.length,n=0;i>n&&"0"==e.charAt(n);)++n;if(n==i)r.c=[r.e=0];else{for(;i>0&&"0"==e.charAt(--i););for(r.e=t-n-1,r.c=[],t=0;i>=n;)r.c[t++]=+e.charAt(n++)}return r}function i(r,e,t,n){var i=r.c,o=r.e+e+1;if(1===t)n=i[o]>=5;else if(2===t)n=i[o]>5||5==i[o]&&(n||0>o||i[o+1]!==p||1&i[o-1]);else if(3===t)n=n||i[o]!==p||0>o;else if(n=!1,0!==t)throw Error(w+"RM: "+t);if(1>o||!i[0])n?(r.e=-e,r.c=[1]):r.c=[r.e=0];else{if(i.length=o--,n)for(;++i[o]>9;)i[o]=0,o--||(++r.e,i.unshift(1));for(o=i.length;!i[--o];)i.pop()}return r}var o,s=20,f=1,c=1e6,u=1e6,h=-7,l=21,a={},g=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,w="[BigError] ",p=void 0;a.abs=function(){var r=new this.constructor(this);return r.s=1,r},a.cmp=function(r){var e,t=this,n=t.c,i=(r=new t.constructor(r)).c,o=t.s,s=r.s,f=t.e,c=r.e;if(!n[0]||!i[0])return n[0]?o:i[0]?-s:0;if(o!=s)return o;if(e=0>o,f!=c)return f>c^e?1:-1;for(o=-1,s=(f=n.length)<(c=i.length)?f:c;++o<s;)if(n[o]!=i[o])return n[o]>i[o]^e?1:-1;return f==c?0:f>c^e?1:-1},a.div=function(r){var e=this,t=e.constructor,n=e.c,o=(r=new t(r)).c,s=e.s==r.s?1:-1,f=t.DP;if(f!==~~f||0>f||f>c)throw Error(w+"DP: "+f);if(!n[0]||!o[0]){if(n[0]==o[0])throw Error(w+NaN);if(!o[0])throw Error(w+s/0);return new t(0*s)}var u,h,l,a,g,v=o.slice(),d=u=o.length,E=n.length,m=n.slice(0,u),N=m.length,P=r,M=P.c=[],R=0,D=f+(P.e=e.e-r.e)+1;for(P.s=s,s=0>D?0:D,v.unshift(0);N++<u;)m.push(0);do{for(l=0;10>l;l++){if(u!=(N=m.length))a=u>N?1:-1;else for(g=-1,a=0;++g<u;)if(o[g]!=m[g]){a=o[g]>m[g]?1:-1;break}if(!(0>a))break;for(h=N==u?o:v;N;){if(m[--N]<h[N]){for(g=N;g&&!m[--g];)m[g]=9;--m[g],m[N]+=10}m[N]-=h[N]}for(;!m[0];)m.shift()}M[R++]=a?l:++l,m[0]&&a?m[N]=n[d]||0:m=[n[d]]}while((d++<E||m[0]!==p)&&s--);return M[0]||1==R||(M.shift(),P.e--),R>D&&i(P,f,t.RM,m[0]!==p),P},a.eq=function(r){return!this.cmp(r)},a.gt=function(r){return this.cmp(r)>0},a.gte=function(r){return this.cmp(r)>-1},a.lt=function(r){return this.cmp(r)<0},a.lte=function(r){return this.cmp(r)<1},a.sub=a.minus=function(r){var e,t,n,i,o=this,s=o.constructor,f=o.s,c=(r=new s(r)).s;if(f!=c)return r.s=-c,o.plus(r);var u=o.c.slice(),h=o.e,l=r.c,a=r.e;if(!u[0]||!l[0])return l[0]?(r.s=-c,r):new s(u[0]?o:0);if(f=h-a){for((i=0>f)?(f=-f,n=u):(a=h,n=l),n.reverse(),c=f;c--;)n.push(0);n.reverse()}else for(t=((i=u.length<l.length)?u:l).length,f=c=0;t>c;c++)if(u[c]!=l[c]){i=u[c]<l[c];break}if(i&&(n=u,u=l,l=n,r.s=-r.s),(c=(t=l.length)-(e=u.length))>0)for(;c--;)u[e++]=0;for(c=e;t>f;){if(u[--t]<l[t]){for(e=t;e&&!u[--e];)u[e]=9;--u[e],u[t]+=10}u[t]-=l[t]}for(;0===u[--c];)u.pop();for(;0===u[0];)u.shift(),--a;return u[0]||(r.s=1,u=[a=0]),r.c=u,r.e=a,r},a.mod=function(r){var e,t=this,n=t.constructor,i=t.s,o=(r=new n(r)).s;if(!r.c[0])throw Error(w+NaN);return t.s=r.s=1,e=1==r.cmp(t),t.s=i,r.s=o,e?new n(t):(i=n.DP,o=n.RM,n.DP=n.RM=0,t=t.div(r),n.DP=i,n.RM=o,this.minus(t.times(r)))},a.add=a.plus=function(r){var e,t=this,n=t.constructor,i=t.s,o=(r=new n(r)).s;if(i!=o)return r.s=-o,t.minus(r);var s=t.e,f=t.c,c=r.e,u=r.c;if(!f[0]||!u[0])return u[0]?r:new n(f[0]?t:0*i);if(f=f.slice(),i=s-c){for(i>0?(c=s,e=u):(i=-i,e=f),e.reverse();i--;)e.push(0);e.reverse()}for(f.length-u.length<0&&(e=u,u=f,f=e),i=u.length,o=0;i;f[i]%=10)o=(f[--i]=f[i]+u[i]+o)/10|0;for(o&&(f.unshift(o),++c),i=f.length;0===f[--i];)f.pop();return r.c=f,r.e=c,r},a.pow=function(r){var e=this,t=new e.constructor(1),n=t,i=0>r;if(r!==~~r||-u>r||r>u)throw Error(w+r);for(r=i?-r:r;1&r&&(n=n.times(e)),r>>=1,r;)e=e.times(e);return i?t.div(n):n},a.round=function(r,e){var t=this,n=t.constructor;if(r===p)r=0;else if(r!==~~r||0>r||r>c)throw Error(w+r);return i(new n(t),r,e===p?n.RM:e)},a.sqrt=function(){var r,e,t,n=this,o=n.constructor,s=n.c,f=n.s,c=n.e,u=new o("0.5");if(!s[0])return new o(n);if(0>f)throw Error(w+NaN);f=Math.sqrt(n.toString()),0===f||f===1/0?(r=s.join(""),r.length+c&1||(r+="0"),e=new o(Math.sqrt(r).toString()),e.e=((c+1)/2|0)-(0>c||1&c)):e=new o(f.toString()),f=e.e+(o.DP+=4);do t=e,e=u.times(t.plus(n.div(t)));while(t.c.slice(0,f).join("")!==e.c.slice(0,f).join(""));return i(e,o.DP-=4,o.RM)},a.mul=a.times=function(r){var e,t=this,n=t.constructor,i=t.c,o=(r=new n(r)).c,s=i.length,f=o.length,c=t.e,u=r.e;if(r.s=t.s==r.s?1:-1,!i[0]||!o[0])return new n(0*r.s);for(r.e=c+u,f>s&&(e=i,i=o,o=e,u=s,s=f,f=u),e=new Array(u=s+f);u--;)e[u]=0;for(c=f;c--;){for(f=0,u=s+c;u>c;)f=e[u]+o[c]*i[u-c-1]+f,e[u--]=f%10,f=f/10|0;e[u]=(e[u]+f)%10}for(f?++r.e:e.shift(),c=e.length;!e[--c];)e.pop();return r.c=e,r},a.toString=a.valueOf=a.toJSON=function(){var r=this,e=r.constructor,t=r.e,n=r.c.join(""),i=n.length;if(t<=e.NE||t>=e.PE)n=n.charAt(0)+(i>1?"."+n.slice(1):"")+(0>t?"e":"e+")+t;else if(0>t){for(;++t;)n="0"+n;n="0."+n}else if(t>0)if(++t>i)for(t-=i;t--;)n+="0";else i>t&&(n=n.slice(0,t)+"."+n.slice(t));else i>1&&(n=n.charAt(0)+"."+n.slice(1));return r.s<0&&r.c[0]?"-"+n:n},a.toExponential=function(r){if(r===p)r=this.c.length-1;else if(r!==~~r||0>r||r>c)throw Error(w+r);return t(this,r,1)},a.toFixed=function(r){var e,n=this,i=n.constructor,o=i.NE,s=i.PE;if(i.NE=-(i.PE=1/0),r===p?e=n.toString():r===~~r&&r>=0&&c>=r&&(e=t(n,n.e+r),n.s<0&&n.c[0]&&e.indexOf("-")<0&&(e="-"+e)),i.NE=o,i.PE=s,!e)throw Error(w+r);return e},a.toPrecision=function(r){if(r===p)return this.toString();if(r!==~~r||1>r||r>c)throw Error(w+r);return t(this,r-1,2)},o=e(),o["default"]=o.Big=o,"function"==typeof define&&define.amd?define(function(){return o}):"undefined"!=typeof module&&module.exports?module.exports=o:r.Big=o}(this);
//# sourceMappingURL=doc/big.js.map
{
"name": "big.js",
"description": "A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic",
"version": "3.2.0",
"version": "4.0.0",
"keywords": [

@@ -37,3 +37,3 @@ "arbitrary",

"test": "node ./test/every-test.js",
"build": "uglifyjs big.js --source-map doc/big.js.map -c -m -o big.min.js --preamble \"/* big.js v3.2.0 https://github.com/MikeMcl/big.js/LICENCE */\""
"build": "uglifyjs big.js --source-map doc/big.js.map -c -m -o big.min.js --preamble \"/* big.js v4.0.0 https://github.com/MikeMcl/big.js/LICENCE */\""
},

@@ -40,0 +40,0 @@ "files": [

@@ -153,4 +153,2 @@

The *big.min.js* already present was created with *Microsoft Ajax Minifier 5.11*.
## TypeScript

@@ -176,5 +174,3 @@

Bitcoin donation to:
**1DppGRQSjVSMgGxuygDEHQuWEdTiVEzJYG**
Thank you
BTC **1DppGRQSjVSMgGxuygDEHQuWEdTiVEzJYG**

@@ -187,2 +183,9 @@ ## Licence

####4.0.0
* 27/09/17
* Rename `Big.E_POS` to `Big.PE`, `Big.E_NEG` to `Big.NE`.
* Refactor error messaging.
* Throw if `null` is passed to `toFixed` etc.
####3.2.0

@@ -206,4 +209,3 @@

* Renamed and exposed `TO_EXP_NEG` and `TO_EXP_POS` as `Big.E_NEG` and
`Big.E_POS`.
* Renamed and exposed `TO_EXP_NEG` and `TO_EXP_POS` as `Big.E_NEG` and `Big.E_POS`.

@@ -222,4 +224,3 @@ ####3.0.2

* 10/12/14 Added [multiple constructor functionality](http://mikemcl.github.io/big.js/#faq).
* No breaking changes or other additions, but a major code reorganisation,
so *v3* seemed appropriate.
* No breaking changes or other additions, but a major code reorganisation, so *v3* seemed appropiate.

@@ -226,0 +227,0 @@ ####2.5.2

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc