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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.