48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
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; |