pub struct Acorn { /* private fields */ }
Expand description
Additive Congruential Random Number (ACORN) generator.
Implementations§
Source§impl Acorn
impl Acorn
Sourcepub fn new(k: Order, seed: Seed) -> Self
pub fn new(k: Order, seed: Seed) -> Self
Create a new ACORN generator.
This function always cycles through generating 20 individual u128
s. This ensures that the
modulus ceiling has been passed and wraps back around to generate a pseudo-random number even
when the lowest values are provided for both Order and Seed.
It returns an Acorn struct that you can use to generate pseudo-random numbers.
The internal modulus is fixed as a u128
set to 2^120.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let order = Order::new(45);
let seed = Seed::new(1_000_000);
let mut prng = Acorn::new(order, seed);
Note that the created generator needs to be mutable to change the internal state.
Sourcepub fn generate_fixed_length_usize(&mut self, length: usize) -> usize
pub fn generate_fixed_length_usize(&mut self, length: usize) -> usize
Generate a random usize
of a fixed digit length.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_usize(3);
assert_eq!(822, number); // assuming above input. further calls will produce different results
Note that the max size of a usize
is platform dependant.
Sourcepub fn generate_fixed_length_u8(&mut self, length: usize) -> u8
pub fn generate_fixed_length_u8(&mut self, length: usize) -> u8
Generate a random u8
of a fixed digit length.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_u8(3);
assert_eq!(111, number); // assuming above input. further calls will produce different results
Note that the length
is clamped between 1 and 3 because u8::MAX
is 3 digits long.
Sourcepub fn generate_fixed_length_u16(&mut self, length: usize) -> u16
pub fn generate_fixed_length_u16(&mut self, length: usize) -> u16
Generate a random u16
of a fixed digit length.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_u16(3);
assert_eq!(822, number); // assuming above input. further calls will produce different results
Note that the length
is clamped between 1 and 5 because u16::MAX
is 5 digits long.
Sourcepub fn generate_fixed_length_u32(&mut self, length: usize) -> u32
pub fn generate_fixed_length_u32(&mut self, length: usize) -> u32
Generate a random u32
of a fixed digit length.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_u32(3);
assert_eq!(822, number); // assuming above input. further calls will produce different results
Note that the length
is clamped between 1 and 10 because u32::MAX
is 10 digits long.
Sourcepub fn generate_fixed_length_u64(&mut self, length: usize) -> u64
pub fn generate_fixed_length_u64(&mut self, length: usize) -> u64
Generate a random u64
of a fixed digit length.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_u64(3);
assert_eq!(822, number); // assuming above input. further calls will produce different results
Note that the length
is clamped between 1 and 20 because u64::MAX
is 20 digits long.
Sourcepub fn generate_fixed_length_u128(&mut self, length: usize) -> u128
pub fn generate_fixed_length_u128(&mut self, length: usize) -> u128
Generate a random u128
of a fixed digit length.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_u128(3);
assert_eq!(822, number); // assuming above input. further calls will produce different results
Note that the length
is clamped between 1 and 39 because u128::MAX
is 39 digits long.
Sourcepub fn generate_usize_between_range(
&mut self,
range: RangeInclusive<usize>,
) -> usize
pub fn generate_usize_between_range( &mut self, range: RangeInclusive<usize>, ) -> usize
Generate a random usize
within a given RangeInclusive
.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_usize_between_range(71..=777);
assert_eq!(571, number); // assuming above input. further calls will produce different results
Sourcepub fn generate_u8_between_range(&mut self, range: RangeInclusive<u8>) -> u8
pub fn generate_u8_between_range(&mut self, range: RangeInclusive<u8>) -> u8
Generate a random u8
within a given RangeInclusive
.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_u8_between_range(71..=255);
assert_eq!(82, number); // assuming above input. further calls will produce different results
Sourcepub fn generate_u16_between_range(&mut self, range: RangeInclusive<u16>) -> u16
pub fn generate_u16_between_range(&mut self, range: RangeInclusive<u16>) -> u16
Generate a random u16
within a given RangeInclusive
.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_u16_between_range(71..=777);
assert_eq!(571, number); // assuming above input. further calls will produce different results
Sourcepub fn generate_u32_between_range(&mut self, range: RangeInclusive<u32>) -> u32
pub fn generate_u32_between_range(&mut self, range: RangeInclusive<u32>) -> u32
Generate a random u32
within a given RangeInclusive
.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_u32_between_range(71..=777);
assert_eq!(571, number); // assuming above input. further calls will produce different results
Sourcepub fn generate_u64_between_range(&mut self, range: RangeInclusive<u64>) -> u64
pub fn generate_u64_between_range(&mut self, range: RangeInclusive<u64>) -> u64
Generate a random u64
within a given RangeInclusive
.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_u64_between_range(71..=777);
assert_eq!(571, number); // assuming above input. further calls will produce different results
Sourcepub fn generate_u128_between_range(
&mut self,
range: RangeInclusive<u128>,
) -> u128
pub fn generate_u128_between_range( &mut self, range: RangeInclusive<u128>, ) -> u128
Generate a random u128
within a given RangeInclusive
.
§Examples
use acorn_prng::{Acorn, Order, Seed};
let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_u128_between_range(71..=777);
assert_eq!(571, number); // assuming above input. further calls will produce different results