Como salvar 10 ^ 19 em Julia sem um estouro

8

Estou tentando salvar o número 10 ^ 19 em uma variável em Julia.

Eu sei que está transbordando, mas achei que fazer algo parecido BigInt(10^19)ou Int128(10^19)resolveria o problema, mas isso não acontece.

Alguma ideia?

Ver comportamento de estouro para Julia

logankilpatrick
fonte

Respostas:

13

Como Julia faz a aritmética do Int64 por padrão, os 10 ^ 19 excedem como o Int64 padrão antes que os parênteses circundantes convertidos para um tipo maior sejam encontrados. Tentar

Int128(10)^20 == BigInt(10)^20 == big"10"^20
Conta
fonte
big(10)^20também funciona.
DNF
Apenas como um comentário lateral: Julia pode ser inteligente o suficiente para detectar em que constantes de intervalo como 10 ^ 19 se encaixam e usar o menor tipo grande o suficiente para se ajustar à constante, ou algumas outras heurísticas que não falham.
Trilarion 29/01
Na verdade, meu palpite seria que isso resulta no impacto no desempenho, de modo que eles o enviam para o usuário.
logankilpatrick 29/01
É menos do que isso, e mais do que conceitualmente, de certa forma, é mais limpo ter regras simples, como se parecesse um int, é um int
Oscar Smith