pub struct PRNG {
seed: u64,
number: u64,
}
impl PRNG {
pub fn new(seed: u64) -> Self {
let mut prng = PRNG { seed: 0, number: 0 };
prng.set_seed(seed);
prng
}
pub fn set_seed(&mut self, seed: u64) {
self.number = seed;
self.seed = seed;
}
pub fn next_prn(&mut self) -> u64 {
self.number ^= self.number << 13;
self.number ^= self.number >> 7;
self.number ^= self.number << 17;
return self.number;
}
pub fn random(&mut self) -> f64 {
let var = (self.next_prn() >> 11) as f64;
var / ((1u64 << 53) - 1) as f64 }
pub fn random_int(&mut self, min: i32, max: i32) -> i32 {
if max < min {
return min;
}
min + (max as f64 * self.random()) as i32
}
}