es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Multiplicar dos números muy grandes puede resultar en mostrar ‘-1’ o ‘0’.

Cuando multiplico dos números grandes (en Double), por ejemplo 2^64, la respuesta que obtengo de mi programa es ‘-1’ y cuando calculo 2^32 la respuesta es ‘0’. Pero cuando intento multiplicar números más pequeños, como 2^10, obtengo la respuesta correcta. ¿Por qué está sucediendo esto?

Por ejemplo, el código:

System.out.println(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2);

imprime ‘0’ en lugar de ‘18446744073709552000’.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Este problema es debido a las limitaciones de precisión del tipo de dato Double en Java. Double tiene un número limitado de dígitos significativos que puede representar, y a medida que los números que se multiplican son más grandes, el resultado de la multiplicación puede superar el número máximo de dígitos significativos.

    En el caso de 2^64, el resultado es un número que requiere más dígitos de los que Double puede representar, por lo que el resultado se representa como -1, que es la constante Double para “Infinito”.

    En el caso de 2^32, el resultado es un número que puede ser representado por Double, pero la multiplicación calculada desborda, dando como resultado un valor de 0.

    Para manejar con precisión números tan grandes en Java, se pueden utilizar bibliotecas como BigDecimal o java.math.BigInteger, que están diseñadas para admitir aritmética de precisión arbitraria.

Comments are closed.