pub struct Generator {
modulus: u64,
multiplier: u64,
increment: u64,
current: u64,
}
impl Generator {
pub fn create(seed: u64) -> Self {
Self {
modulus: 2u64.pow(31) - 1,
multiplier: 48271,
increment: 0,
current: seed,
}
}
pub fn generate(&mut self, min: f32, max: f32) -> f32 {
self.current = (self.multiplier * self.current + self.increment) % self.modulus;
(self.current as f32 / (self.modulus - 1) as f32) * (max - min) + min
}
pub fn shuffle(&mut self, values: &mut Vec<usize>) {
for i in 0..values.len() {
let j = self.generate(0.0, values.len() as f32) as usize;
values.swap(i, j);
}
}
}