BigInteger

BigInteger

> LeekScript

BigInteger er en type i LeekScript som ble lagt til i oppdatering 2.48. Det er en ny primitiv type som er kompatibel med de andre eksisterende typene, og som særlig brukes til å gjøre det enklere å lage og optimalisere bitmaps.

Definisjon

En BigInteger er et heltall som oppfører seg nesten som en Integer, men som kan være mye større: en vanlig Integer er begrenset til 64 bit (263-1), mens en BigInteger kan inneholde opptil 1 048 576 bit (220), altså omtrent 315 000 desimalsifre. Over dette taket feiler beregningen med feilen OUT_OF_MEMORY.

Merk: Denne typen er ikke ment å erstatte de eksisterende typene overalt (siden den koster mer i operasjoner og bruker mer arbeidsminne). Den er ikke nyttig for å løse gåten til Potiron Maléfique.

Bruk

Deklarasjon

Man bruker bokstaven L for å angi at et tall er en BigInteger. Skilletegnet _ godtas i litteraler for å gjøre dem mer lesbare:

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

Konstruktøren BigInteger() lager en BigInteger med verdien 0, og operatoren instanceof lar deg teste typen til en verdi:

var x = BigInteger() debug(x instanceof BigInteger) // true

Merk at et stort tall ikke oppdages automatisk: uten suffikset L blir en litteral som er for stor for en Integer til en Real (med tap av presisjon). Bare suffikset L eller typen big_integer lager en BigInteger:

var a = 123445321324234567895431235648945674894561564523489756489 // Real: 1.2344532132423457E56 var b = 1 >> seg som >> (aritmetisk skift: fortegnet bevares). Operatoren / fungerer derimot som på andre tall og returnerer en Real (15L / 4L er 3.75); bare \ utfører heltallsdivisjon (15L \ 4L er 3`). En operasjon med en BigInteger gir som oftest et resultat av typen BigInteger:

var a = 5.0 + 5L // BigInteger var b = 123456789123456789L % 234567 // BigInteger

Kostnaden i operasjoner og minne er proporsjonal med størrelsen på operandene – og med produktet av størrelsene til de to operandene for , \, % og *:

var a = 2L * 200_000 // omtrent 1 221 000 operasjoner: resultatet er på 200 001 bit var b = 2L * 200_000_000 // koster nesten ingenting... fordi det krasjer: resultatet ville overstige taket på 1 048 576 bit (OUT_OF_MEMORY)

Visning

Svært store tall kuttes for å redusere beregningene og unngå å overfylle visningen (funksjonene binString og hexString viser dem i sin helhet, med en justert kostnad):

debug(1L >> og >>`.

Andre nyttige funksjoner