> LeekScript
BigInteger est un type du Leekscript ajouté dans la mise à jour 2.48. Il s'agit d'une nouvelle primitive qui est compatible avec les autres types existants, qui sert notamment à faciliter la création et l'optimisation des bitmaps.
Un BigInteger est un nombre entier qui se comporte quasiment comme un Integer, mais peut être bien plus grand : un Integer classique est limité à 64 bits (263-1), un BigInteger peut contenir jusqu'à 1 048 576 bits (220), soit environ 315 000 chiffres décimaux. Au-delà de ce plafond, le calcul échoue avec une erreur OUT_OF_MEMORY.
Note : Ce type n'a pas vocation à remplacer partout les types existants (car il coûte plus cher en opérations et utilise plus de mémoire vive). Il n'est pas utile pour résoudre l'énigme du Potiron Maléfique.
On utilise la lettre L pour désigner un nombre comme BigInteger. Le séparateur _ est accepté dans les littéraux pour les rendre plus lisibles :
var a = 1L var b = 0b111L big_integer c = 5 big_integer d = -3L var e = 1_000_000L
Le constructeur BigInteger() crée un BigInteger valant 0, et l'opérateur instanceof permet de tester le type d'une valeur :
var x = BigInteger() debug(x instanceof BigInteger) // true
Attention, un grand nombre n'est pas détecté automatiquement : sans suffixe L, un littéral trop grand pour un Integer devient un Real (avec perte de précision). Seuls le suffixe L ou le type big_integer créent un BigInteger :
var a = 123445321324234567895431235648945674894561564523489756489 // Real : 1.2344532132423457E56 var b = 1 >> se comporte comme >> (décalage arithmétique : le signe est conservé). L'opérateur /, lui, fonctionne comme sur les autres nombres et renvoie un Real (15L / 4L vaut 3.75) ; seul \ effectue la division entière (15L \ 4L vaut 3`). Une opération avec un BigInteger donne le plus souvent un résultat de type BigInteger :
var a = 5.0 + 5L // BigInteger var b = 123456789123456789L % 234567 // BigInteger
Le coût en opérations et en mémoire est proportionnel à la taille des opérandes — et au produit des tailles des deux opérandes pour , \, % et * :
var a = 2L * 200_000 // environ 1 221 000 opérations : le résultat fait 200 001 bits var b = 2L * 200_000_000 // ne coûte presque rien... parce que ça plante : le résultat dépasserait le plafond de 1 048 576 bits (OUT_OF_MEMORY)
Les nombres très grands sont coupés pour réduire les calculs et éviter de saturer l'affichage (les fonctions binString et hexString l'affichent en entier avec un coût ajusté) :
debug(1L >> et >>`.
bitCount(0b1101L) vaut 3 ;trailingZeros(24L) vaut 3 ;signum(-42L) vaut -1.Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.