Supponiamo che mi venga dato un array di numeri interi a larghezza fissa (cioè si inseriscono in un registro di larghezza ), . Voglio calcolare la somma su una macchina con l'aritmetica del complemento di 2, che esegue aggiunte modulo con semantica avvolgente. È facile, ma la somma può superare la dimensione del registro e, in caso affermativo, il risultato sarà errato.
Se la somma non trabocca, voglio calcolarla e verificare che non ci sia troppo pieno, il più velocemente possibile. Se la somma trabocca, voglio solo sapere che lo fa, non mi interessa alcun valore.
L'aggiunta ingenua di numeri in ordine non funziona, perché una somma parziale potrebbe traboccare. Ad esempio, con i registri a 8 bit, è valido e ha una somma di , anche se la somma parziale supera l'intervallo del registro .
Ovviamente potrei usare un registro più grande come accumulatore, ma ipotizziamo il caso interessante in cui sto già utilizzando la dimensione del registro più grande possibile.
Esiste una tecnica ben nota per aggiungere numeri con il segno opposto come la somma parziale corrente . Questa tecnica evita gli overflow in ogni fase, al costo di non essere compatibile con la cache e di non sfruttare molto la previsione del ramo e l'esecuzione speculativa.
Esiste una tecnica più veloce che forse sfrutta il permesso di overflow di somme parziali ed è più veloce su una macchina tipica con un flag di overflow, una cache, un predittore di diramazioni ed esecuzione e carichi speculativi?
(Questo è il seguito della somma sicura di Overflow )