]> Cypherpunks.ru repositories - gostls13.git/commitdiff
all: calculate the median uniformly
authorJes Cok <xigua67damn@gmail.com>
Thu, 7 Sep 2023 11:07:30 +0000 (11:07 +0000)
committerGopher Robot <gobot@golang.org>
Sat, 9 Sep 2023 01:46:03 +0000 (01:46 +0000)
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>
src/regexp/syntax/prog.go
src/time/zoneinfo.go
src/unicode/letter.go
src/unicode/letter_test.go

index 66995e2052de59bc6a614cd922a01db9b45d8be2..d69ae1a12d2d0b3cd9f0fe8cd9c5e29e417c3d42 100644 (file)
@@ -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
index 4edcf3d98f12963a43378213235da740fb1c2469..42d40d584ee0ec611bb5c396eed3a76d03d7a500 100644 (file)
@@ -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
index f3f8e52964829daa3c1e2f9b787c77d0adffd1ac..f64dfc9af5e169a02a49ad1106178115f4e2340a 100644 (file)
@@ -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 {
index a91e3a326fd2903b0081697d9e8a15241bfc8e74..123f9a642e9bf6091ad8e699cd35bc4508441892 100644 (file)
@@ -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