js-big-integer
Version:
Yet another class for arbitrary-precision integers in pure JavaScript. Small. Well tested.
84 lines (73 loc) • 4.24 kB
Markdown
BigInteger
==========
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`
Example
=======
```javascript
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:
1. <http://www.leemon.com/crypto/BigInt.html>
2. <https://github.com/jtobey/javascript-bignum>
3. <https://github.com/node-modules/node-biginteger>
4. <https://github.com/vukicevic/crunch>
5. <https://github.com/MikeMcl/bignumber.js>
6. <https://github.com/peterolson/BigInteger.js>
7. <https://github.com/silentmatt/javascript-biginteger>
8. <http://www-cs-students.stanford.edu/~tjw/jsbn/>
9. <https://github.com/Yaffle/BigInteger>
10. <https://github.com/peteroupc/BigNumber>
11. <https://github.com/indutny/bn.js>
12. <https://github.com/dankogai/js-math-bigint>
13. <https://github.com/defunctzombie/int>
14. <https://github.com/dtrebbien/BigDecimal.js>
15. <https://github.com/iriscouch/bigdecimal.js>
16. <http://ofmind.net/doc/hapint>
17. <https://github.com/GoogleChromeLabs/jsbi>
18. <https://github.com/tabatkins/bignum>
Benchmark:
<http://yaffle.github.io/BigInteger/benchmark/>