Go: cmd/рд╕рдВрдХрд▓рди: Nexus 9 linux/arm64 рдкрд░ рдкрд░реАрдХреНрд╖рдг/рддреНрд╡рд░рд┐рдд рджреБрд░реНрд╡реНрдпрд╡рд╣рд╛рд░

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдорд╛рд░реНрдЪ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: golang/go

рдкрд░реАрдХреНрд╖рдг/рддреНрд╡рд░рд┐рдд рдХрд╛ int64 рдЪрдпрдирдХрд░реНрддрд╛ [-2тБ╢┬▓,2тБ╢┬▓] рд╢реНрд░реЗрдгреА рдореЗрдВ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИ; рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдЬреЛ #19808 рд╣реИред

рд▓реЗрдХрд┐рди рдХреЛрдб рд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рднреА @ dr2chase рдХреЗ Nexus 9 . рдкрд░ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП
рдПрдХ Android/arm64 рдЯреВрд▓рдЪреЗрди рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдПрдХ linux/arm64 рдЯреВрд▓рдЪреИрди рдЪрд▓рд╛рдирд╛
рдХрд╣реАрдВ рдФрд░ рд╕реЗ рдХреНрд░реЙрд╕-рд╕рдВрдХрд▓рд┐рдд, рдЕрдиреБрднрд╡рдЬрдиреНрдп рд░реВрдк рд╕реЗ рдпрд╣ рдмрд╛рд╣рд░ рдХреЗ рдореВрд▓реНрдп рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
рд╡рд╣ рд╕реАрдорд╛ред (рдЗрд╕рд╕реЗ #19807 рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реАред)

linux/arm64 рдЯреВрд▓рдЪреЗрди рд╕реЗ рдирд┐рд░реНрдорд┐рдд linux/arm64 рдЯреВрд▓рдЪреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдПрдХ Odroid рдкрд░ рдХрд╣реАрдВ рдФрд░ рд╕реЗ рдХреНрд░реЙрд╕-рд╕рдВрдХрд▓рд┐рдд рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг/рддреНрд╡рд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рдмрд╛рд╣рд░ рдХреНрдпреЛрдВ рд╡рд░реНрддрдорд╛рди рдХреЛрдб рд╕рдВрдХрд░реА рд╕реАрдорд╛ рдХреЗ рдмрд╛рд╣рд░ рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВред

рдЧрдгрд┐рдд/рд░реИрдВрдб (* рд░реИрдВрдб)ред Int63 рдХрд╣рддреЗ рд╣реИрдВ:

return r.src.Int63()

рдФрд░ (*rngSource).Int63 рдХрд╣рддреЗ рд╣реИрдВ:

return int64(rng.Uint64() & _MASK)

рдХрд╣рд╛рдБ рдкреЗ:

const (
    _MAX  = 1 << 63
    _MASK = _MAX - 1
)

рдФрд░ рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдг/рддреНрд╡рд░рд┐рдд рдХрд╛ randInt64 рдлрд╝рдВрдХреНрд╢рди рдХрд░рддрд╛ рд╣реИ:

return rand.Int63() - 1<<62

рддреЛ рдпрд╛ рддреЛ & _MASK рдпрд╛ - 1<<62 рдЕрдкрдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Nexus 9 ARM64 рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдмрдЧреНрдЧреА рд╣реЛред
рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ android/arm64 рдЯреВрд▓рдЪреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
Nexus 9 рдкрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
linux/arm64 рдЯреВрд▓рдЪреЗрди рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реЛрдирд╛, рдЬрд┐рд╕рд╕реЗ рдкрд░реАрдХреНрд╖рдг/рддреНрд╡рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбред рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред

#include <stdio.h>

typedef unsigned long long uvlong;

uvlong f() { return ~0ull; }
uvlong g() { return (f() << 1) >> 1; }

int main() {
    for (int i = 0;; i++) {
        if ((long long)g() < 0) {
            printf("%d\n", i);
        }
    }
    return 0;
}

20k-50k рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж рд▓реВрдк рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ i рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЧреЛ рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИред рд╣рдо рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

CL https://golang.org/cl/39152 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред

#include <stdio.h>

typedef unsigned long long uvlong;

uvlong f() { return ~0ull; }
uvlong g() { return (f() << 1) >> 1; }

int main() {
    for (int i = 0;; i++) {
        if ((long long)g() < 0) {
            printf("%d\n", i);
        }
    }
    return 0;
}

20k-50k рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж рд▓реВрдк рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ i рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЧреЛ рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИред рд╣рдо рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред

CL https://golang.org/cl/39310 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

OneOfOne picture OneOfOne  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ianlancetaylor picture ianlancetaylor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gopherbot picture gopherbot  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

michaelsafyan picture michaelsafyan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bbodenmiller picture bbodenmiller  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ