aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJes Cok <xigua67damn@gmail.com>2023-09-07 11:07:30 +0000
committerGopher Robot <gobot@golang.org>2023-09-09 01:46:03 +0000
commit267323ef2d22da4b2a5ed1ed6f220421aa580a6c (patch)
treec3f00aaf1e254d4585a5dc8ebf09daad9d019654 /src
parent4651c0c6d9239514715123f0788d4c2c769130f7 (diff)
downloadgo-267323ef2d22da4b2a5ed1ed6f220421aa580a6c.tar.xz
all: calculate the median uniformly
Like sort.Search, use "h := int(uint(i+j) >> 1)" style code to calculate the median. Change-Id: Ifb1a19dde1c6ed6c1654bc642fc9565a8b6c5fc4 GitHub-Last-Rev: e2213b738832f1674948d6507f40e2c0b98cb972 GitHub-Pull-Request: golang/go#62503 Reviewed-on: https://go-review.googlesource.com/c/go/+/526496 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Ian Lance Taylor <iant@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/regexp/syntax/prog.go2
-rw-r--r--src/time/zoneinfo.go2
-rw-r--r--src/unicode/letter.go8
-rw-r--r--src/unicode/letter_test.go2
4 files changed, 7 insertions, 7 deletions
diff --git a/src/regexp/syntax/prog.go b/src/regexp/syntax/prog.go
index 66995e2052..d69ae1a12d 100644
--- a/src/regexp/syntax/prog.go
+++ b/src/regexp/syntax/prog.go
@@ -247,7 +247,7 @@ func (i *Inst) MatchRunePos(r rune) int {
lo := 0
hi := len(rune) / 2
for lo < hi {
- m := lo + (hi-lo)/2
+ m := int(uint(lo+hi) >> 1)
if c := rune[2*m]; c <= r {
if r <= rune[2*m+1] {
return m
diff --git a/src/time/zoneinfo.go b/src/time/zoneinfo.go
index 4edcf3d98f..42d40d584e 100644
--- a/src/time/zoneinfo.go
+++ b/src/time/zoneinfo.go
@@ -184,7 +184,7 @@ func (l *Location) lookup(sec int64) (name string, offset int, start, end int64,
lo := 0
hi := len(tx)
for hi-lo > 1 {
- m := lo + (hi-lo)/2
+ m := int(uint(lo+hi) >> 1)
lim := tx[m].when
if sec < lim {
end = lim
diff --git a/src/unicode/letter.go b/src/unicode/letter.go
index f3f8e52964..f64dfc9af5 100644
--- a/src/unicode/letter.go
+++ b/src/unicode/letter.go
@@ -106,7 +106,7 @@ func is16(ranges []Range16, r uint16) bool {
lo := 0
hi := len(ranges)
for lo < hi {
- m := lo + (hi-lo)/2
+ m := int(uint(lo+hi) >> 1)
range_ := &ranges[m]
if range_.Lo <= r && r <= range_.Hi {
return range_.Stride == 1 || (r-range_.Lo)%range_.Stride == 0
@@ -139,7 +139,7 @@ func is32(ranges []Range32, r uint32) bool {
lo := 0
hi := len(ranges)
for lo < hi {
- m := lo + (hi-lo)/2
+ m := int(uint(lo+hi) >> 1)
range_ := ranges[m]
if range_.Lo <= r && r <= range_.Hi {
return range_.Stride == 1 || (r-range_.Lo)%range_.Stride == 0
@@ -216,7 +216,7 @@ func to(_case int, r rune, caseRange []CaseRange) (mappedRune rune, foundMapping
lo := 0
hi := len(caseRange)
for lo < hi {
- m := lo + (hi-lo)/2
+ m := int(uint(lo+hi) >> 1)
cr := caseRange[m]
if rune(cr.Lo) <= r && r <= rune(cr.Hi) {
delta := cr.Delta[_case]
@@ -350,7 +350,7 @@ func SimpleFold(r rune) rune {
lo := 0
hi := len(caseOrbit)
for lo < hi {
- m := lo + (hi-lo)/2
+ m := int(uint(lo+hi) >> 1)
if rune(caseOrbit[m].From) < r {
lo = m + 1
} else {
diff --git a/src/unicode/letter_test.go b/src/unicode/letter_test.go
index a91e3a326f..123f9a642e 100644
--- a/src/unicode/letter_test.go
+++ b/src/unicode/letter_test.go
@@ -518,7 +518,7 @@ func binary(ranges []Range16, r uint16) bool {
lo := 0
hi := len(ranges)
for lo < hi {
- m := lo + (hi-lo)/2
+ m := int(uint(lo+hi) >> 1)
range_ := &ranges[m]
if range_.Lo <= r && r <= range_.Hi {
return (r-range_.Lo)%range_.Stride == 0