why left+(right-left)/2 will not overflow? -
in article: http://googleresearch.blogspot.sg/2006/06/extra-extra-read-all-about-it-nearly.html, mentioned quick sort algorithm had bug (left+right)/2, , pointed out solution using left+(right-left)/2 instead of (left+right)/2. solution given in question bug in quicksort example (k&r c book)?
my question why left+(right-left)/2 can avoid overflow? how prove it? in advance.
you have left < right definition.
as consequence, right - left > 0, , furthermore left + (right - left) = right (follows basic algebra).
and consequently left + (right - left) / 2 <= right. no overflow can happen since every step of operation bounded value of right.
by contrast, consider buggy expression, (left + right) / 2. left + right >= right, , since don’t know values of left , right, it’s entirely possible that value overflows.
Comments
Post a Comment