simulator/engine/rng.js
// Seeded PRNG for the engine (never Math.random). mulberry32 by Tommy Ettinger
// (public domain), plus a Box–Muller normal deviate. Pure; no DOM.
export function mulberry32(seed) {
let a = (Number(seed) >>> 0) || 0x9e3779b9;
const next = () => {
a = (a + 0x6d2b79f5) >>> 0;
let t = a;
t = Math.imul(t ^ (t >>> 15), t | 1);
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
};
return next;
}
export function createRng(seed = 1) {
const uniform = mulberry32(seed);
let spare = null;
const normal = () => {
if (spare !== null) { const s = spare; spare = null; return s; }
let u = 0, v = 0;
while (u <= Number.EPSILON) u = uniform();
v = uniform();
const r = Math.sqrt(-2 * Math.log(u));
spare = r * Math.sin(2 * Math.PI * v);
return r * Math.cos(2 * Math.PI * v);
};
return { uniform, normal };
}
Source and scopePublished from Smart-NOA-Controller/simulator/engine/rng.js at revision 6e5b205e3843. Full source text is retained; HTML presentation does not establish independent clinical review. In-memory simulation with no patient, monitor or pump interface; not clinically validated.