> LeekScript
BigInteger è un tipo del LeekScript aggiunto nell'aggiornamento 2.48. Si tratta di una nuova primitiva, compatibile con gli altri tipi esistenti, che serve in particolare a facilitare la creazione e l'ottimizzazione delle bitmap.
Un BigInteger è un numero intero che si comporta quasi come un Integer, ma può essere molto più grande: un Integer classico è limitato a 64 bit (263-1), mentre un BigInteger può contenere fino a 1 048 576 bit (220), cioè circa 315 000 cifre decimali. Oltre questo limite, il calcolo fallisce con un errore OUT_OF_MEMORY.
Nota: questo tipo non è destinato a sostituire ovunque i tipi esistenti (perché costa di più in operazioni e usa più memoria). Non è utile per risolvere l'enigma della Zucca Malvagia.
Si usa la lettera L per indicare che un numero è un BigInteger. Nei letterali è accettato il separatore _, per renderli più leggibili:
var a = 1L var b = 0b111L big_integer c = 5 big_integer d = -3L var e = 1_000_000L
Il costruttore BigInteger() crea un BigInteger che vale 0, e l'operatore instanceof permette di verificare il tipo di un valore:
var x = BigInteger() debug(x instanceof BigInteger) // true
Attenzione: un numero grande non viene riconosciuto automaticamente: senza il suffisso L, un letterale troppo grande per un Integer diventa un Real (con perdita di precisione). Solo il suffisso L o il tipo big_integer creano un BigInteger:
var a = 123445321324234567895431235648945674894561564523489756489 // Real : 1.2344532132423457E56 var b = 1 >> si comporta come >> (scorrimento aritmetico: il segno è conservato). L'operatore /, invece, funziona come sugli altri numeri e restituisce un Real (15L / 4L vale 3.75); solo \ esegue la divisione intera (15L \ 4L vale 3`). Un'operazione con un BigInteger dà il più delle volte un risultato di tipo BigInteger:
var a = 5.0 + 5L // BigInteger var b = 123456789123456789L % 234567 // BigInteger
Il costo in operazioni e in memoria è proporzionale alla dimensione degli operandi — e al prodotto delle dimensioni dei due operandi per , \, % e *:
var a = 2L * 200_000 // circa 1 221 000 operazioni : il risultato occupa 200 001 bit var b = 2L * 200_000_000 // non costa quasi nulla... perché va in errore : il risultato supererebbe il limite di 1 048 576 bit (OUT_OF_MEMORY)
I numeri molto grandi vengono troncati per ridurre i calcoli ed evitare di saturare la visualizzazione (le funzioni binString e hexString li mostrano per intero, con un costo adeguato):
debug(1L >> e >>`.
bitCount(0b1101L) vale 3;trailingZeros(24L) vale 3;signum(-42L) vale -1.Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.