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.