BigInt
is a relatively new addition to JavaScript and many aren't familiar with it. This was my case until recently. While working on the Closest Number puzzle on codingame.com, I found myself having to deal with numbers of sizes as big as 101000.
As you may know, the largest number that can be reliably represented in JavaScript using the Number
primitive is 253 or, for comparison, a bit less than 1016. So Number
wasn't anywhere close to cutting it. Thankfully, now, there is BigInt
.
BigInt
is a built-in object that provides a way to represent whole numbers larger than 253. There is technically no limit to just how big a BigInt can be, although in practice most JavaScript engine will set their own limit, but it's big, reaaaaaalllyy big.
A BigInt
can be created in two ways. You can either simply append the letter n
to the end of an integral number or by calling the function BigInt()
.
const reallyBig = 91234567890123456789n
const alsoQuiteBig = BigInt(91234567890123456789)
const justAsBig = BigInt("91234567890123456789")
My solution to the Closest Number puzzle involved getting the difference between two large numbers, but not always knowing which one of the two numbers would be bigger. With regular JavaScript Number
you would normally do something like:
Math.abs(a - b)
And even if a
was smaller than b
, you would get the absolute value of the difference between a
and b
as a positive number. The problem with trying to do that with BigInt
is that the Math
object's methods only work on number
s not on bigint
s. Solution? Write your own Math
class. That's just what I have started doing as I have a feeling I will have to use BigInt
s again in the near future.
export class Mathb {
static abs(x: bigint): bigint {
return x < 0 ? -x : x;
}
}
For now, all I have is the abs
method but I plan to add to the class as the need arises.
Have you used BigInt
yet? Please share anything interesting you have found about it in the comment section below.
Comments