testing/quickμ int64 μ νκΈ°λ [-2βΆΒ²,2βΆΒ²) λ²μμ κ°μ λ°ννλλ‘ μμ±λμμ΅λλ€.
그건 μ€μμΌ. #19808μ μμ ν©λλ€.
κ·Έλ¬λ μ½λλ μμ±λ λλ‘ μ€νλμ΄μΌ νμ§λ§ @dr2chase μ Nexus 9μμλ
android/arm64 ν΄μ²΄μΈμμ λΉλλ linux/arm64 ν΄μ²΄μΈ μ€ν
λ€λ₯Έ κ³³μμ κ΅μ°¨ μ»΄νμΌλμ΄ κ²½νμ μΌλ‘ μΈλΆ κ°μ μμ±ν©λλ€.
κ·Έ λ²μ. (#19807μ μ°Ύλ λ° λμμ΄ λμμ΅λλ€.)
linux/arm64 λꡬ 체μΈμμ λΉλλ linux/arm64 λꡬ μ²΄μΈ μ¬μ©
Odroidμ λ€λ₯Έ κ³³μμ ν¬λ‘μ€ μ»΄νμΌνλ©΄ μ¬λ°λ₯΄κ² μλν©λλ€.
μ 체 λ²μλ₯Ό μμ±νκΈ° μν΄ ν
μ€νΈ/λΉ λ₯Έ μμ μ μ
νμ¬ μ½λκ° λ μ’μ λ²μλ₯Ό λ²μ΄λλ κ°μ μμ±νλ μ΄μ
μ΄ κ΅¬μ±μμ.
μν/λλμ (*Rand).Int63 λ§νλ€:
return r.src.Int63()
λ° (* rngSource).Int63μ λ€μκ³Ό κ°μ΄ λ§ν©λλ€.
return int64(rng.Uint64() & _MASK)
μ΄λ:
const (
_MAX = 1 << 63
_MASK = _MAX - 1
)
κ·Έλ° λ€μ testing/quickμ randInt64 ν¨μλ λ€μμ μνν©λλ€.
return rand.Int63() - 1<<62
λ°λΌμ & _MASK
λλ - 1<<62
κ° μλνμ§ μμ΅λλ€.
Nexus 9 ARM64 νλμ¨μ΄μ λ²κ·Έκ° μμ μ μμ΅λλ€.
android/arm64 ν΄μ²΄μΈμ΄ λ€μ μ©λλ‘ μ¬μ© μ€μΌ μ μμ΅λλ€.
Nexus 9μ λΆνΈμ€νΈλ©μ λ²κ·Έκ° μμ΄ κΈ°λ³Έμ μΌλ‘ μ»΄νμΌλ©λλ€.
linux/arm64 ν΄μ²΄μΈμ΄ λ²κ·Έκ° μμ΄ ν
μ€νΈ/λΉ λ₯Έ
μμμΉ λͺ»ν κ°μ μμ±νλ μ½λ. μ°λ¦¬λ λͺ¨λ₯Έλ€.
CL https://golang.org/cl/39152 μ μ΄ λ¬Έμ κ° μΈκΈλμ΄ μμ΅λλ€.
λ€μ C νλ‘κ·Έλ¨μ λ¬Έμ κ° μλ μμ€ν μμ μ€μλν©λλ€.
#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 μ μ΄ λ¬Έμ κ° μΈκΈλμ΄ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
λ€μ C νλ‘κ·Έλ¨μ λ¬Έμ κ° μλ μμ€ν μμ μ€μλν©λλ€.
20k-50k λ°λ³΅ νμ 루νλ λͺ¨λ λ°λ³΅μμ iλ₯Ό μΈμνκΈ° μμν©λλ€.
κ³ μ μλͺ»μ΄ μλλ€. λ€λ₯Έ κ³³μμ λ³΄κ³ νλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€.