Números inteiros gigantes com `BigInt` no JavaScript
O BigInt
é um tipo de dado usado para representar números inteiros extremamente grandes com precisão total. Ele é especialmente útil quando precisamos lidar com números maiores do que o tipo number
pode representar.
O tipo number
no JavaScript é baseado em ponto flutuante e possui limitações para representar números inteiros maiores que 2^53 - 1
ou menores que -(2^53 - 1)
. O BigInt
supera essas limitações, permitindo trabalhar com números inteiros de qualquer tamanho.
Para criar um valor BigInt
, basta adicionar a letra n
ao final do número.
Criando valores BigInt
Exemplo 1:
let numeroGrande = 123456789012345678901234567890n
Também é possível criar valores BigInt
usando a função BigInt()
, que é útil para conversões de outros tipos, como string
ou number
.
Exemplo 2:
let inteiro1 = BigInt(12345) // Conversão de number para BigInt
let inteiro2 = BigInt('12345') // Conversão de string para BigInt
Operações aritméticas com BigInt
O BigInt
suporta todas as operações aritméticas padrão, como adição, subtração, multiplicação, divisão e potenciação. Essas operações mantêm a precisão completa, sem arredondamento ou perda de dados.
Exemplo 1:
console.log(10n + 10n) // 20n
console.log(10n - 10n) // 0n
console.log(10n * 10n) // 100n
console.log(10n / 10n) // 1n
console.log(10n ** 10n) // 10000000000n
console.log(10n % 10n) // 0n
As operações com BigInt
são especialmente úteis para números muito grandes.
Exemplo 2:
let resultado = 2n ** 70n // 1180591620717411303424n
Aqui, 2
elevado à potência de 70
resulta em um número extremamente grande, que é representado com precisão pelo BigInt
.
Atenção: Divisões com BigInt
não permitem valores fracionados. O resultado será arredondado para o inteiro mais próximo.
Exemplo 3:
console.log(5n / 2n) // 2n
Neste caso, o resultado é 2n
, pois o BigInt
não suporta valores decimais.
Operações de comparação com BigInt
O BigInt
suporta operadores de comparação como >
, <
, >=
, <=
, ===
e !==
.
Exemplo 1:
console.log(10n < 20n) // true
console.log(10n > 20n) // false
console.log(10n !== 20n) // true
console.log(10n === 20n) // false
Os operadores de comparação também funcionam entre valores number
e BigInt
, mas é importante ter cuidado com os operadores de igualdade estrita (===
e !==
), pois eles levam em conta o tipo.
Exemplo 2:
console.log(500 === 500n) // false
console.log(500 == 500n) // true
Conversões numéricas com BigInt()
A função BigInt()
permite converter valores de outros tipos, como number
ou string
, para BigInt
.
Exemplo 1:
// Conversão de diferentes formatos para BigInt
let bigint1 = BigInt(1000000000) // De number
let bigint2 = BigInt('1000000000') // De string
let bigint3 = BigInt('0x3b9aca00') // De hexadecimal
let bigint4 = BigInt('0b111011100110101100101000000000') // De binário
console.log(bigint1 === bigint2) // true
console.log(bigint2 === bigint3) // true
console.log(bigint3 === bigint4) // true
Neste exemplo, diferentes representações do mesmo número são convertidas para BigInt
e comparadas, resultando em valores equivalentes.
Atenção: Ao converter um BigInt
para number
, você pode perder precisão se o valor for muito grande.
Exemplo 2:
let big = 123456789012345678901234567890n
let numero = Number(big)
console.log(BigInt(numero) === big) // false
Aqui, a conversão de BigInt
para number
resulta em perda de precisão, pois o tipo number
não consegue representar o valor original com exatidão.
O BigInt
é uma ferramenta poderosa para lidar com números inteiros gigantes, mas deve ser usado com cuidado, especialmente ao realizar operações que envolvem outros tipos de dados. Escolher o tipo de dado correto para cada situação é essencial para garantir a precisão e a lógica do seu programa.