Cómo guardar 10 ^ 19 en Julia sin un desbordamiento

8

Estoy tratando de guardar el número 10 ^ 19 en una variable en Julia.

Sé que está desbordando, pero pensé que hacer algo así BigInt(10^19)o Int128(10^19)resolvería el problema, pero no lo hace.

¿Alguna idea?

Ver comportamiento de desbordamiento para Julia

logankilpatrick
fuente

Respuestas:

13

Julia realiza la aritmética Int64 por defecto, por lo que el 10 ^ 19 se desborda como Int64 predeterminado antes de que se encuentren los paréntesis circundantes que se convierten en un tipo más grande. Tratar

Int128(10)^20 == BigInt(10)^20 == big"10"^20
Cuenta
fuente
big(10)^20También funciona.
DNF
Solo como un comentario secundario: Julia podría ser lo suficientemente inteligente como para detectar qué constantes de rango como 10 ^ 19 encajan y usar el tipo más pequeño lo suficientemente grande como para ajustarse a la constante, o alguna otra heurística que no falle.
Trilarion
De hecho, supongo que esto dará como resultado un impacto en el rendimiento, por lo que lo empujarán hacia el usuario.
logankilpatrick
Es menos eso, y más que conceptualmente es de alguna manera más limpio tener reglas simples como si pareciera un int, es un int
Oscar Smith