export function random(min, max) { // Return a random number in the range [min, max) return Math.random() * (max - min) + min; } export function randint(min, max, high = false) { // Return a random integer in the range [min, max) or [min, max] return Math.floor(Math.random() * (max - min + high)) + min; } export function randn(mu = 0, sigma = 1, n = 1) { const list = []; function generatePair() { let u = 0, v = 0; while (u === 0) u = Math.random(); while (v === 0) v = Math.random(); list.push(mu + sigma * Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v)); list.push(mu + sigma * Math.sqrt(-2.0 * Math.log(u)) * Math.sin(2.0 * Math.PI * v)); } while (list.length < n) { generatePair(); } return n === 1 ? list[0] : list.slice(0, n); } export function choice(list) { return list[randint(0, list.length)]; } export function shuffle(list) { list = list.slice(); for (let i = 0; i < list.length; i++) { const j = randint(i, list.length); [list[i], list[j]] = [list[j], list[i]]; } return list; } export const Random = { random, randint, randn, choice, shuffle }; export default Random;