Function malachite_nz::integer::random::striped_random_integers
source · pub fn striped_random_integers(
seed: Seed,
mean_stripe_numerator: u64,
mean_stripe_denominator: u64,
mean_bits_numerator: u64,
mean_bits_denominator: u64
) -> StripedRandomIntegers<GeometricRandomSigneds<i64>> ⓘ
Expand description
Generates striped 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. A striped bit sequence with the given
stripe parameter is generated and truncated at the bit length. The highest bit is forced to be
1, an Integer
is generated from the sequence, 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).
The output length is infinite.
See StripedBitSource
for information about generating striped random numbers.
§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_stripe_denominator
is zero, if mean_stripe_numerator < mean_stripe_denominator
, 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::striped_random_integers;
use malachite_nz::integer::Integer;
assert_eq!(
prefix_to_string(striped_random_integers(EXAMPLE_SEED, 16, 1, 32, 1), 10),
"[65536, 75521006248971741167616, 32, -2199023255520, -68719468544, -527, 0, -112, \
131071, 4152, ...]"
)