Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

162
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda