Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

154
Vistas
¿Por qué recibo un desbordamiento del sistema usando un entero grande (System.Numerics)?

Recibo este error: System.OverflowException: 'El valor no es un número'. Tenía la impresión de que un entero grande podría almacenar cualquier valor de tamaño (500 ^ 500 en este caso), así que no entiendo por qué sucede esto.

 public int decode(int code) { int totient = (p - 1) * (q - 1); int d = modInverse(e, totient); int pq = p * q; BigInteger decodedMessage = new BigInteger(Math.Pow(code, d) % pq); return (int)decodedMessage; }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

BigInteger decodedMessage = new BigInteger(Math.Pow(code, d) % pq);

Bueno, Math.Pow(code, d) % pq no es un BigInteger, es una expresión de tipo double . La conversión del resultado a BigInteger no tendrá efecto hasta que se complete el cálculo (y se haya desbordado).

Math.Pow puede desbordarse fácilmente a Double.PositiveInfinity con números grandes, y Double.PositiveInfinity % someNumber produce Double.NaN . Llamar new BigInteger(Double.NaN) produce el error que ha descrito.

Necesita hacer el cálculo en BigInteger. Afortunadamente, hay un método exactamente para ese propósito ( BigInteger.ModPow ):

 BigInteger decodedMessage = BigInteger.ModPow(code, d, pq);

(BigInteger.ModPow requiere parámetros BigInteger, pero hay conversiones implícitas de int a BigInteger).

over 4 years ago · Santiago Trujillo Denunciar

0

Parece que pq es 0 , luego lanza la misma excepción:

 new BigInteger(0.0 % 0);

La división de double por cero da como resultado Double.NaN que no es un valor válido para instanciar un BigInteger de acuerdo con docs :

Excepciones

OverflowException

el value es NaN, NegativeInfinity o PositiveInfinity.

O, como @Heinzi mencionó correctamente en los comentarios, Math.Pow da como resultado Infinity.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda