pub fn mcg16807(seed: &mut u32) -> i32 {
let tmp: u64 = 16807u64 * *seed as u64;
*seed = ( tmp % 2147483647 ) as u32;
*seed as i32
}
pub fn mcg_Schrage(seed: &mut u32) -> i32 {
let mut ix:i32 = *seed as i32;
let k1: i32 = ix / 127773;
ix = 16807 * ( ix - k1 * 127773) - k1 * 2836;
if ix < 0 {
ix += 2147483647;
}
*seed = ix as u32;
ix
}
#[allow(non_upper_case_globals)]
pub fn Park_Miller(seed: &mut u32) -> i32 {
const a: i32 = 16807;
const m: i32 = 2147483647;
const q: i32 = 127773; const r: i32 = 2836;
let mut iseed = *seed as i32;
let hi: i32 = iseed / q;
let lo: i32 = iseed % q;
let test: i32 = a * lo - r * hi;
if test > 0 {
iseed = test;
} else {
iseed = test + m;
}
*seed = iseed as u32;
iseed
}
pub fn Whittle(seed: &mut u32) -> i32 {
let hi:u32 = 16807 * (*seed >> 16);
let mut lo:u32 = 16807 * (*seed & 0xFFFF);
lo += (hi & 0x7FFF) << 16;
lo += hi >> 15;
if (lo > 2147483647) {
lo -= 2147483647;
}
*seed = lo;
lo as i32
}