2016-11-17 2 views
0

Je l'ai vu de nombreuses implémentations utilisant ci-dessous pour trouver point médian de deux indices:point médian à diviser pour mieux régner implémentations de l'algorithme

int mid = lo + (hi - lo)/2; 

au lieu de

int mid = (lo + hi)/2; 

, je vois Mathématiquement aucune différence et Pourtant, je n'ai jamais vu quelqu'un en utilisant celui ci-dessous. Y a-t-il une différence entre les deux en termes de calcul?

+0

Alors vous n'avez simplement pas vu grand-chose. –

+0

Vous pouvez essayer lo = 1, salut = 2147483647. –

+1

Et ceci [oldie, mais goodie] (https://research.googleblog.com/2006/06/extra-extra-read-all-about-it-nearly. html) –

Répondre

1

Il existe une valeur positive maximale pour un entier binaire signé 32 bits en cours de calcul.

Nous supposons cette valeur est 100.

int lo = 60; 
int hi = 80; 

puis lo + hi = 60 + 80 = 140>100, il est dangereux de le faire parce qu'il provoquera une erreur integer overflow.

+0

"il provoquera une erreur de dépassement d'entier" Le dépassement d'entier n'est pas vraiment une erreur, n'est-ce pas? C'est juste la façon dont les ordinateurs gèrent la situation erronée d'un nombre nécessitant trop de bits pour représenter. – dorukayhan