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 Integers 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 Integers 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, ...]"
)