> LeekScript
BigInteger é um tipo do LeekScript adicionado na atualização 2.48. Trata-se de uma nova primitiva compatível com os outros tipos existentes, que serve principalmente para facilitar a criação e a otimização dos bitmaps.
Um BigInteger é um número inteiro que se comporta quase como um Integer, mas pode ser bem maior: um Integer clássico é limitado a 64 bits (263-1), enquanto um BigInteger pode conter até 1 048 576 bits (220), ou seja, cerca de 315 000 algarismos decimais. Acima desse teto, o cálculo falha com um erro OUT_OF_MEMORY.
Nota: esse tipo não tem a vocação de substituir os tipos existentes em todo lugar (pois custa mais caro em operações e usa mais memória). Ele não é útil para resolver o enigma da Abóbora maligna.
Usa-se a letra L para designar um número como BigInteger. O separador _ é aceito nos literais para torná-los mais legíveis:
var a = 1L var b = 0b111L big_integer c = 5 big_integer d = -3L var e = 1_000_000L
O construtor BigInteger() cria um BigInteger valendo 0, e o operador instanceof permite testar o tipo de um valor:
var x = BigInteger() debug(x instanceof BigInteger) // true
Atenção: um número grande não é detectado automaticamente. Sem o sufixo L, um literal grande demais para um Integer vira um Real (com perda de precisão). Apenas o sufixo L ou o tipo big_integer criam um BigInteger:
var a = 123445321324234567895431235648945674894561564523489756489 // Real : 1.2344532132423457E56 var b = 1 >> se comporta como >> (deslocamento aritmético: o sinal é conservado). O operador /, por sua vez, funciona como nos outros números e retorna um Real (15L / 4L vale 3.75); apenas \ efetua a divisão inteira (15L \ 4L vale 3`). Uma operação com um BigInteger dá, na maioria das vezes, um resultado de tipo BigInteger:
var a = 5.0 + 5L // BigInteger var b = 123456789123456789L % 234567 // BigInteger
O custo em operações e em memória é proporcional ao tamanho dos operandos — e ao produto dos tamanhos dos dois operandos para , \, % e *:
var a = 2L * 200_000 // cerca de 1 221 000 operações: o resultado tem 200 001 bits var b = 2L * 200_000_000 // quase não custa nada... porque dá erro: o resultado ultrapassaria o teto de 1 048 576 bits (OUT_OF_MEMORY)
Os números muito grandes são cortados para reduzir os cálculos e evitar saturar a exibição (as funções binString e hexString os mostram por inteiro, com um custo ajustado):
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.