func (r *RNG) Uint64n(n uint64) uint64 {
	if n == 0 {
		return 0
	}

	x := r.Uint64()
	h, l := bits.Mul64(x, n)

	if l < n {
		t := -n
		if t >= n {
			t -= n
			if t >= n {
				t = t % n
			}
		}

	again:
		if l < t {
			x = r.Uint64()
			h, l = bits.Mul64(x, n)
			goto again
		}
	}

	return h
}
// Uint64n returns a uint64 uniformly in [0, n).
// Not safe for concurrent callers.
Uint64n returns a uint64 uniformly in [0, n).
Not safe for concurrent callers.
// Uint64n returns a uint64 uniformly in [ 0 n ) . // Not safe for concurrent callers .
func (r *RNG) Uint64n(n uint64) uint64 {
	if n == 0 {
		return 0
	}
	x := r.Uint64()
	h, l := bits.Mul64(x, n)
	if l < n {
		t := -n
		if t >= n {
			t -= n
			if t >= n {
				t = t % n
			}
		}
	again:
		if l < t {
			x = r.Uint64()
			h, l = bits.Mul64(x, n)
			goto again
		}
	}
	return h
}
func ( r * RNG ) Uint64n ( n uint64 ) uint64 { if n == 0 { return 0 } x := r . Uint64 ( ) h , l := bits . Mul64 ( x , n ) if l < n { t := - n if t >= n { t -= n if t >= n { t = t % n } } again : if l < t { x = r . Uint64 ( ) h , l = bits . Mul64 ( x , n ) goto again } } return h }
Uint64n returns a uint64 uniformly in [0, n).
Uint64n returns a uint64 uniformly in [ 0 n ) .