¿Cómo evito el desbordamiento de enteros en C ++?

El desbordamiento de enteros no se puede detectar después del hecho. Debe verificar los operandos para ver si puede suceder y manejarlo adecuadamente para su caso de uso.

Además, la detección de desbordamiento sería algo como esto:

  // quiero hacer c = a + b
 int a, b, c;
 int diff = INT_MAX - a;
 si (b> diff) {
   // se producirá un desbordamiento para a + b
 }
 c = a + b;

Para la multiplicación es lo mismo, pero haces la división en lugar de la resta y es posible que tengas que tener en cuenta el resto de la división entera si realmente quieres cubrir todos los casos límite.

Como nota al margen del algoritmo RSA en el que está trabajando. Implementar algoritmos criptográficos para que funcionen es una cosa. Implementarlos para que estén seguros es mucho más difícil. Hay muchas cláusulas ‘if’ en su código sin y ‘else’ … todas esas son un gran lugar para un ataque de tiempo. Para evitar ataques de tiempo, debe hacer que el programa se ejecute durante la misma cantidad de tiempo, independientemente de la entrada. Para descubrir más google “ataque de canal lateral”.

¿No calculan números que son demasiado grandes?

De todos modos, si te tomas en serio reinventar la rueda por cualquier razón, deberías buscar una gran biblioteca de enteros. Aquí hay un comienzo: la biblioteca GNU MP Bignum.

No es una función integrada en C ++, pero algunos compiladores (como gcc) ofrecen soporte. Para estar seguro, realice una comprobación previa al alcance. Normalmente sabes dónde pueden ocurrir tales cosas.

More Interesting

Cómo encontrar el enésimo número faltante más pequeño de una matriz de números

¿Qué algoritmos de visión por computadora se utilizan en Protracer para el vuelo de una pelota de golf?

Cómo escribir un buen algoritmo

¿Dónde puedo encontrar una biblioteca de estructura de datos de gráficos dirigida, implementada en Javascript?

Cómo escribir una matriz para un libro de calificaciones que acepte 10 entradas y no requiera usarlas todas

Cómo ser bueno en el desarrollo de algoritmos muy complejos

Matrices de sufijos: Dadas dos cadenas s1 y s2. ¿Cuál es el mejor algoritmo para encontrar el número de subcadenas comunes entre s1 y s2 de longitud 1, 2,… hasta min (| s1 |, | s2 |)?

Probé el problema 'Impresión espiral de matriz' durante 2 días. Incluso después de ver la solución, sigo fallando. ¿Qué tengo que hacer?

¿Cuál es un buen algoritmo de segmentación para reconocer números de imágenes?

¿Cuáles son las mejores preguntas de la entrevista de estructura de datos de árbol?

¿Qué sitio web / tutorial / video puedo usar para comprender muy bien la programación dinámica en un día?

¿Qué es la estructura de datos inmutable?

¿Por qué no todos simplemente compran algoritmos comerciales y se enriquecen con ellos?

Quiero construir una casa de piedra óptima, usando una computadora para decidir la disposición de las piedras. ¿Cómo podría funcionar esto?

¿Cuál es la estructura de datos más simple y eficiente para representar la topología molecular?