// Seeded 64-bit LCG — deterministic replay support (same recipe as rqgm-mbt).

///|
pub struct LCG {
  priv mut state : UInt64
}

///|
pub fn LCG::new(seed : UInt64) -> LCG {
  { state: seed * 6364136223846793005UL + 1442695040888963407UL, }
}

///|
pub fn LCG::next_u64(self : LCG) -> UInt64 {
  self.state = self.state * 6364136223846793005UL + 1442695040888963407UL
  self.state
}

///|
/// Uniform double in [0, 1) — top 53 bits.
pub fn LCG::next_double(self : LCG) -> Double {
  let v = self.next_u64() >> 11
  v.to_double() / 9007199254740992.0
}