рдкрд░реАрдХреНрд╖рдг/рддреНрд╡рд░рд┐рдд рдХрд╛ 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 рдЯреВрд▓рдЪреЗрди рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реЛрдирд╛, рдЬрд┐рд╕рд╕реЗ рдкрд░реАрдХреНрд╖рдг/рддреНрд╡рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбред рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗред
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 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
20k-50k рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж рд▓реВрдк рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ i рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
рдЧреЛ рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИред рд╣рдо рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред