mirror of https://github.com/golang/go.git
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/36332
Reviewed-by: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
|
||
|---|---|---|
| .. | ||
| example_interface_test.go | ||
| example_keys_test.go | ||
| example_multi_test.go | ||
| example_search_test.go | ||
| example_test.go | ||
| example_wrapper_test.go | ||
| export_test.go | ||
| genzfunc.go | ||
| search.go | ||
| search_test.go | ||
| sort.go | ||
| sort_test.go | ||
| zfuncversion.go | ||