BigInteger

BigInteger

> LeekScript

Cette fonctionnalité n'est pas encore implémentée. Elle arrivera prochainement dans le jeu.

BigInteger est un type du Leekscript ajouté dans la mise à jour ???. 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.

Définition

Un BigInteger est un nombre entier qui se comporte quasiment comme un Integer, mais est (presque) illimité en taille : un Integer classique est limité à 64 bits (263-1), un BigInteger peut contenir des valeurs bien plus grandes.

Note : Ce type n'a pas vocation à remplacer partout les types existants (car il coute plus cher en opérations) et n'est pas utile pour résoudre l'énigme du Potiron Maléfique.

Usage

Déclaration

On utilise la lettre L pour désigner un nombre comme BigInteger :

var a = 1L var b = 0b111L big_integer b = 5 big_integer c = -3L

S'il est déjà très grand à la déclaration, il est détecté automatiquement :

var a = 123445321324234567895431235648945674894561564523489756489 // BigInteger var b = 1 la valeur est coupée à 64 bits)

Opérations

La plupart des opérations et fonctions qui peuvent utiliser des Integer ou Real sont supportées, avec au pire un cast vers l'un de ces types. L'opérateur >> fonctionne comme >>> et l'opérateur / fonctionne comme \. 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

Les fonctions utilisées avec un BigInteger ont un coût en opérations et en mémoire en fonction de leur taille :

var a = 2L ** 200_000_000; // 200 000 ops, 3 Mo ram a -= 1; // 400 000 ops, car a est très grand var x = 1L // 9 ops

Affichage

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

La fonction bitLength

La fonction leadingZeros ne fonctionne pas sur un BigInteger car il n'a pas de taille prédéfinie. Il faut à la place utiliser bitLength qui renvoie le nombre de bits nécessaires pour contenir le nombre.

Les fonctions setBit et testBit

Pour lire ou modifier un BigInteger bit par bit, il vaut mieux utiliser les fonctions setBit et testBit, qui coutent moins cher en opérations que les opérateurs binaires >> et >>.