So sparen Sie 10 ^ 19 in Julia ohne Überlauf

8

Ich versuche, die Zahl 10 ^ 19 in einer Variablen in Julia zu speichern.

Ich weiß, dass es überfüllt ist, aber ich dachte mir, dass ich das Problem tun BigInt(10^19)oder Int128(10^19)lösen würde, aber das tut es nicht.

Irgendwelche Gedanken?

Siehe Überlaufverhalten für Julia

logankilpatrick
quelle

Antworten:

13

Julia führt standardmäßig Int64-Arithmetik durch, sodass die 10 ^ 19 als Standard-Int64 überlaufen, bevor die umgebenden Klammern in einen größeren Typ umgewandelt werden. Versuchen

Int128(10)^20 == BigInt(10)^20 == big"10"^20
Rechnung
quelle
big(10)^20funktioniert auch.
DNF
Nur als Nebenbemerkung: Julia könnte klug genug sein, um zu erkennen, welche Bereichskonstanten wie 10 ^ 19 passen, und den kleinsten Typ verwenden, der groß genug ist, um der Konstante zu entsprechen, oder eine andere Heuristik, die nicht fehlschlägt.
Trilarion
In der Tat würde ich davon ausgehen, dass dies zu einem Leistungseinbruch führt, sodass sie dem Benutzer nachgeschaltet werden.
Logankilpatrick
Es ist weniger das und mehr als konzeptionell ist es in gewisser Weise sauberer, einfache Regeln zu haben, wie wenn es wie ein Int aussieht, es ist ein Int
Oscar Smith