Ce face BigInt
Un int are 64 de biți pe platformele native: cel mai mare este 9223372036854775807. Peste această limită valoarea „se întoarce” la numere negative (depășire). BigInt nu are limită: poate ține 100! sau 21000, cu toate cifrele exacte.
Creezi valori cu BigInt.from(int) (dintr-un double, zecimalele se taie), cu BigInt.parse dintr-un text, sau folosești constantele BigInt.zero, BigInt.one, BigInt.two. Operatorii sunt cei obișnuiți (+, -, *, ~/, %, comparații), dar ambii operanzi trebuie să fie BigInt.
Calculele cu BigInt sunt mai lente decât cu int. Folosește-l doar când numerele pot depăși limita: factoriale, criptografie, identificatori foarte mari. Înapoi la int mergi cu toInt(), după ce verifici isValidInt.
Parametri
| Parametru | Descriere |
|---|---|
value |
La from: numărul convertit. |
Ce returnează
Un BigInt.
Exemple
Exemplul 1: Depășirea lui int față de BigInt
void main() {
var maxInt = 9223372036854775807;
print(maxInt + 1);
var mare = BigInt.from(maxInt) + BigInt.one;
print(mare);
print(BigInt.from(7.9));
print(BigInt.two * BigInt.from(21));
print(mare.isValidInt);
print(BigInt.from(1000).toInt() + 1);
}
Rezultat
-9223372036854775808
9223372036854775808
7
42
false
1001
Exemplul 2: Factorialul lui 30
BigInt factorial(int n) {
var rezultat = BigInt.one;
for (var i = 2; i <= n; i++) {
rezultat *= BigInt.from(i);
}
return rezultat;
}
int factorialInt(int n) {
var r = 1;
for (var i = 2; i <= n; i++) {
r *= i;
}
return r;
}
void main() {
print('30! = ${factorial(30)}');
print('cu int: ${factorialInt(30)}');
print('cifre: ${factorial(30).toString().length}');
print(factorial(30) % BigInt.from(1000000007));
}
Rezultat
30! = 265252859812191058636308480000000
cu int: -8764578968847253504
cifre: 33
109361473
Greșeli frecvente
- Combini
BigIntcuint:mare + 1nu compilează. Scriemare + BigInt.onesaumare + BigInt.from(1). - Folosești
/: rezultatul estedoubleși pierzi precizia. Pentru împărțire întreagă folosește~/.
Comenzi înrudite
BigInt.parse: Transformă un text cu cifre, oricât de lung, într-un BigInt; acceptă și alte baze (radix) și prefixul 0x.BigInt.pow: Ridică un BigInt la o putere întreagă, cu rezultat exact; modPow calculează puterea modulo un număr.int: Tipul pentru numere întregi (fără zecimale): vârste, cantități, note, indici.int.gcd: gcd dă cel mai mare divizor comun; modPow calculează (n la puterea e) modulo m, fără depășire.