A minimal, dependency-free pseudo-random number generator (PRNG) library for Rust, based on a Linear Congruential Generator (LCG).
- Seedable random number generator
- Generate random integers, floats, booleans
- Generate random numbers in a range
- Pick random elements from slices
- Generate random signed/unsigned integers of specific bit sizes
- Algorithm selection: LCG (default), PCG (with
pcgfeature) - No external dependencies
no_stdcompatible (default feature:std)
Add to your Cargo.toml:
[dependencies]
simple_rng = "0.3.0"Import and use in your code:
use simple_rng::RNG;
fn main() {
let mut rng = RNG::from_time();
let random_number = rng.gen_range(1, 100);
println!("Random number: {}", random_number);
}You can select the algorithm at runtime:
use simple_rng::{RNG, Algorithm};
let mut rng = RNG::new(42);
rng.set_algorithm(Algorithm::Lcg); // or Algorithm::Pcg if enabledRNG::new(seed: u64)- Create with a custom seedRNG::from_time()- Create seeded from system time (requiresstdfeature)RNG::from_entropy()- Generates seed from system entropy (beta, requiresstdfeature)set_algorithm(Algorithm)- Select LCG or PCG (if enabled)next()- Next random u64gen_range(min, max)- Random integer in [min, max]gen_float()- Random float in [0.0, 1.0)gen_bool()- Random booleangen_unsigned(size: u8)- Random unsigned integer (8, 16, 32, 64 bits)gen_signed(size: u8)- Random signed integer (8, 16, 32, 64 bits)pick_random(slice)- Pick random element from slice, returnsOption<&T>
std(enabled by default): Enables seeding from system time or entropy and other standard library features.pcg: Enables the PCG algorithm for improved randomness.no_std: Use in embedded or constrained environments.
2024
https://crates.io/crates/simple_rng
MIT