Function malachite_nz::integer::random::random_integers
source · pub fn random_integers(
seed: Seed,
mean_bits_numerator: u64,
mean_bits_denominator: u64
) -> RandomIntegers<GeometricRandomSigneds<i64>> ⓘ
Expand description
Generates random Integer
s whose absolute values have a specified mean bit length.
The actual signed bit length is chosen from a distribution that produces values whose mean
absolute values are $m$, where $m$ is mean_bits_numerator / mean_bits_denominator
(see
geometric_random_signeds
); $m$ must be greater than 0. Then an Integer
is chosen
uniformly among all Integer
s with that bit length, and its sign is set to the sign of the
signed bit length. The resulting distribution has no mean or higher-order statistics (unless $m
< 1$, which is not typical).
$$ P(n) = \begin{cases} \frac{1}{2m+1} & \text{if} \quad n = 0, \\ \frac{2}{2m+1} \left ( \frac{m}{2(m+1)} \right ) ^ {\lfloor \log_2 |n| \rfloor + 1} & \text{otherwise}. \end{cases} $$
The output length is infinite.
§Expected complexity per iteration
$T(n, m) = O(n + m)$
$M(n, m) = O(n / m)$
where $T$ is time, $M$ is additional memory, $n$ is mean_precision_numerator
, and $m$ is
mean_precision_denominator
.
§Panics
Panics if mean_bits_numerator
or mean_bits_denominator
are zero, or, if after being reduced
to lowest terms, their sum is greater than or equal to $2^{64}$.
§Examples
use malachite_base::iterators::prefix_to_string;
use malachite_base::random::EXAMPLE_SEED;
use malachite_nz::integer::random::random_integers;
use malachite_nz::integer::Integer;
assert_eq!(
prefix_to_string(random_integers(EXAMPLE_SEED, 32, 1), 10),
"[89270, 69403499476962893258904, 62, -1848070042786, -64671510460, -696, 0, -79, 70819, \
7330, ...]"
)