Supongamos que me dan una serie de enteros de ancho fijo (es decir, caben en un registro de ancho ), . Quiero calcular la suma en una máquina con aritmética de complemento a 2, que realiza adiciones módulo con semántica envolvente. Eso es fácil, pero la suma puede desbordar el tamaño del registro, y si lo hace, el resultado será incorrecto.
Si la suma no se desborda, quiero calcularla y verificar que no haya desbordamiento, lo más rápido posible. Si la suma se desborda, solo quiero saber que sí, no me importa ningún valor.
Agregar ingenuamente números en orden no funciona, porque una suma parcial puede desbordarse. Por ejemplo, con registros de 8 bits, es válido y tiene una suma de , aunque la suma parcial desborda el rango de registro .
Obviamente, podría usar un registro más grande como acumulador, pero supongamos el caso interesante en el que ya estoy usando el tamaño de registro más grande posible.
Existe una técnica bien conocida para agregar números con el signo opuesto como la suma parcial actual . Esta técnica evita desbordamientos en cada paso, a costa de no ser amigable con el caché y no aprovechar mucho la predicción de rama y la ejecución especulativa.
¿Existe una técnica más rápida que tal vez aproveche el permiso para desbordar sumas parciales y sea más rápida en una máquina típica con un indicador de desbordamiento, un caché, un predictor de rama y ejecución y cargas especulativas?
(Este es un seguimiento de la suma segura de desbordamiento )