Skip to content

Instantly share code, notes, and snippets.

@TatsuyaYamamoto
Last active July 17, 2022 09:46
Show Gist options
  • Save TatsuyaYamamoto/c50e3a4098ed666256944a774b39a311 to your computer and use it in GitHub Desktop.
Save TatsuyaYamamoto/c50e3a4098ed666256944a774b39a311 to your computer and use it in GitHub Desktop.
const getDecimalPointRound = (value, decimalPointPlace) => {
const digit = Math.pow(10, decimalPointPlace);
return Math.round(value * digit) / digit;
}
const getNonZeroRandom = () => {
let r = 0;
while (r === 0) {
r = Math.random();
}
return r;
};
const getNormalDistributionRandom = (sd, mean, skew = 0) => {
const random1 = getNonZeroRandom();
const random2 = getNonZeroRandom();
const r = Math.sqrt(-2.0 * Math.log(random1));
const theta = 2.0 * Math.PI * random2;
const sndRandom1 = r * Math.cos(theta);
if(skew === 0){
return sndRandom1 * sd + mean;
}
const sndRandom2 = r * Math.sin(theta);
const X = skew / Math.sqrt(1 + skew * skew);
const skewedDist = X * sndRandom1 + Math.sqrt(1 - X * X) * sndRandom2;
return (0 <= sndRandom1? 1 : -1) * skewedDist * sd + mean;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment