considera quanto segue:
(i+j)/2
i e j sono entrambi numeri interi a 32 bit e anche il risultato dovrebbe essere. Ma nella piccola equazione, c'è un overflow nascosto, i + j potrebbe diventare più grande di un intero a 32 bit anche se il risultato sarebbe sempre un intero a 32 bit.
public class Sum{
public static void main(String []args){
int i = 2147483647;
int j = 2147483647;
System.out.println((i + j)/2);
}
}
Mi dà -1 come risultato.
Come proteggersi da situazioni che possono traboccare ma non sono sempre evidenti. C'è uno schema che descrive questo?
(a parte dichiarare tutto a lungo)
Sto cercando una risposta generale, l'esempio java è solo per fornire un esempio, il mio Delphi fa lo stesso.