sort: optimize average calculation in binary search
Use fewer instructions to calculate the average of i and j without overflowing at the addition. Even if both i and j are math.MaxInt{32,64}, the sum fits into a uint{32,64}. Because the sum of i and j is always ≥ 0, the right shift by one does the same as a division by two. The result of the shift operation is at most math.MaxInt{32,64} and fits again into an int{32,64}. name old time/op new time/op delta SearchWrappers-4 153ns ± 3% 143ns ± 6% -6.33% (p=0.000 n=90+100) This calculation is documented in: https://research.googleblog.com/2006/06/extra-extra-read-all-about-it-nearly.html Change-Id: I2be7922afc03b3617fce32e59364606c37a83678 Reviewed-on: https://go-review.googlesource.com/36332Reviewed-by: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Showing
Please register or sign in to comment