Ce face BigInt.pow
baza.pow(n) returnează baza la puterea n, cu toate cifrele: BigInt.two.pow(100) are 31 de cifre exacte. Exponentul este un int nenegativ; un exponent negativ aruncă ArgumentError.
Funcția pow din dart:math lucrează cu num și, pentru numere mari, fie depășește limita lui int, fie dă un double aproximativ. Cu BigInt rezultatul este mereu exact.
Pentru puteri uriașe din care îți trebuie doar restul (criptografie, verificări) folosește modPow(exponent, modul): calculează rapid fără să construiască numărul întreg.
Parametri
| Parametru | Descriere |
|---|---|
exponent |
Puterea (int ≥ 0 la pow). |
modulus |
La modPow: numărul la care se ia restul. |
Ce returnează
Un BigInt.
Exemple
Exemplul 1: Puteri exacte
math.pow(2, 100) lucrează cu int și depășește limita de 64 de biți, așa că afișează 0. BigInt dă rezultatul exact.
import 'dart:math' as math;
void main() {
var p = BigInt.two.pow(100);
print(p);
print(p.toString().length);
print(math.pow(2, 100));
print(BigInt.from(10).pow(25));
print(BigInt.from(3).modPow(BigInt.from(200), BigInt.from(1000)));
}
Rezultat
1267650600228229401496703205376
31
0
10000000000000000000000000
1
Exemplul 2: Dobândă compusă cu bani în bani
Lucrăm în bani (sutimi de leu) și cu factorul 105/100 ridicat la puterea anilor, ca să nu apară erori de rotunjire până la final.
void main() {
var depus = BigInt.from(1000000);
const perioade = {1: 'un an', 10: '10 ani', 30: '30 de ani'};
for (var ani in perioade.keys) {
var factorSus = BigInt.from(105).pow(ani);
var factorJos = BigInt.from(100).pow(ani);
var bani = depus * factorSus ~/ factorJos;
var lei = bani ~/ BigInt.from(100);
var rest = (bani % BigInt.from(100)).toString().padLeft(2, '0');
print('După ${perioade[ani]} la 5%: $lei,$rest lei');
}
}
Rezultat
După un an la 5%: 10500,00 lei
După 10 ani la 5%: 16288,94 lei
După 30 de ani la 5%: 43219,42 lei
Greșeli frecvente
- Dai un
BigIntca exponent:x.pow(BigInt.two)nu compilează. Exponentul luipoweste unint.
Comenzi înrudite
BigInt: Numere întregi oricât de mari, fără depășire; BigInt.from transformă un int, BigInt.one este valoarea 1.pow: Ridică un număr la o putere; cu baza și exponentul întregi dă int, altfel double.int.gcd: gcd dă cel mai mare divizor comun; modPow calculează (n la puterea e) modulo m, fără depășire.