Yet another BigInteger class in JavaScript This library performs arithmetic operations on integers of arbitrary size.
To use it from a web browser:
<script src="BigInteger.js"></script>
To use it from the node.js:
npm install Yaffle/BigInteger
Then:
var BigInteger = require("js-big-integer").BigInteger;
The API is terrible, but small integers are stored as primitive numbers, so operations on small integers are faster. The API was updated to match the API provided by https://github.com/GoogleChromeLabs/jsbi
Operation | BigInteger |
Number |
BigInt (https://github.com/tc39/proposal-bigint) |
---|---|---|---|
Conversion from String | BigInteger.BigInt(string) |
Number(string) |
BigInt(string) |
Conversion from Number | BigInteger.BigInt(number) |
N/A | BigInt(number) |
Conversion to String | a.toString(radix) |
a.toString(radix) |
a.toString(radix) |
Conversion to Number | a.toNumber() |
N/A | Number(bigint) |
Addition | BigInteger.add(a, b) |
a + b |
a + b |
Subtraction | BigInteger.subtract(a, b) |
a - b |
a - b |
Multiplication | BigInteger.multiply(a, b) |
0 + a * b |
a * b |
Division | BigInteger.divide(a, b) |
0 + Math.trunc(a / b) |
a / b |
Remainder | BigInteger.remainder(a, b) |
0 + a % b |
a % b |
Exponentiation | BigInteger.exponentiate(a, b) |
0 + a**b |
a**b |
Negation | BigInteger.unaryMinus(a) |
0 - a |
-a |
Comparison | BigInteger.equal(a, b) |
a === b |
a === b |
... | BigInteger.lessThan(a, b) |
a < b |
a < b |
... | BigInteger.greaterThan(a, b) |
a > b |
a > b |
... | BigInteger.notEqual(a, b) |
a !== b |
a !== b |
... | BigInteger.lessThanOrEqual(a, b) |
a <= b |
a <= b |
... | BigInteger.greaterThanOrEqual(a, b) |
a >= b |
a >= b |
Signed Right Shift | BigInteger.signedRightShift(a, b) |
a >> b |
a >> b |
Left Shift | BigInteger.leftShift(a, b) |
a << b |
a << b |
var factorial = function (n) {
var result = BigInteger.BigInt(1);
var i = 0;
while (++i <= n) {
result = BigInteger.multiply(result, BigInteger.BigInt(i));
}
return result;
};
console.log(factorial(30).toString(10));
Other pure JavaScript implementations:
- http://www.leemon.com/crypto/BigInt.html
- https://github.com/jtobey/javascript-bignum
- https://github.com/node-modules/node-biginteger
- https://github.com/vukicevic/crunch
- https://github.com/MikeMcl/bignumber.js
- https://github.com/peterolson/BigInteger.js
- https://github.com/silentmatt/javascript-biginteger
- http://www-cs-students.stanford.edu/~tjw/jsbn/
- https://github.com/Yaffle/BigInteger
- https://github.com/peteroupc/BigNumber
- https://github.com/indutny/bn.js
- https://github.com/dankogai/js-math-bigint
- https://github.com/defunctzombie/int
- https://github.com/dtrebbien/BigDecimal.js
- https://github.com/iriscouch/bigdecimal.js
- http://ofmind.net/doc/hapint
- https://github.com/GoogleChromeLabs/jsbi
- https://github.com/tabatkins/bignum