
์ปดํจํฐ๊ฐ ๋ง๋๋ ๋๋ค์ ์ ๋ง๋ก ๋๋คํ ๊น?
์ด๋ฒ ํฌ์คํ
์์๋ ๋๋ค
์ ๋ํด์ ํ๋ฒ ์ด์ผ๊ธฐ ํด๋ณผ๊น ํ๋ค. ๋๋ค์ด๋ ์ด๋ค ์ฌ๊ฑด์ด ๋ฐ์ํ์ ๋ ์ด์ ์ฌ๊ฑด๊ณผ ๋ค์ ์ฌ๊ฑด์ ๊ท์น์ฑ์ด ๋ณด์ด์ง ์๋, ๋ง ๊ทธ๋๋ก ๋ฌด์์
๋ก ๋ฐ์ํ๋ ํจํด์ ์ด์ผ๊ธฐํ๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ปดํจํฐ๋ ๋๋คํ ํจํด์ ๋ง๋ค์ด์ผ ํ ๋๊ฐ ์๊ณ ๋ ์ค์ ๋ก๋ ๋ง๋ค๊ณ ์๋ค.
ํ์ง๋ง ์ปดํจํฐ๋ ์ฌ์ค ๊ทธ๋ฅ ๊ธฐ๋ฅ์ด ๋ง์ ๊ณ์ฐ๊ธฐ
์ ๋ถ๊ณผํ๋ค. ๊ณ์ฐ๊ธฐ๋ ์
๋ ฅ๋ ๊ฐ์ ๊ฐ์ง๊ณ ์ด๋ฆฌ ์ ๋ฆฌ ๊ฐ์ง๊ณ ๋๋ค๊ฐ ๊ฒฐ๊ณผ๊ฐ์ ๋ด๋๋ ๋ฌผ๊ฑด์ด๋ค. ๊ทผ๋ฐ ์ด๋ฐ ๊ณ์ฐ๊ธฐ๊ฐ ์ด๋ป๊ฒ ๋๋ค
ํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ ๊ฒ์ผ๊น? ์ฐ๋ฆฌ๋ ์ด ์ง๋ฌธ์ ๋ํ ๋ต์ ์ฐพ๊ธฐ ์ ์ ๊ทผ๋ณธ์ ์ผ๋ก ๋๋ค์ด๋ ๊ฒ์ด ๋ฌด์์ธ์ง๋ถํฐ ์๊ฐํด๋ด์ผํ๋ค. ์ง์ง ๋ฌด์์
๋ผ๋ ๊ฒ์ด ์กด์ฌํ๊ธฐ๋ ํ๋ ๊ฑธ๊น?
๋๋ค(Random)์ด๋ ๋ฌด์์ผ๊น?
๋จผ์ , ๋๋ค
์ด๋ ๋ฌด์์ผ๊น? ์์์ ์ค๋ช
ํ๋ฏ์ด ๋ฌด์์
๋ก ๋ฐ์ํ๋ ์ด๋ ํ ํจํด์ด๋ค.
์ฌ๋๋ง๋ค ์๊ฒฌ์ด ๋ถ๋ถํ๊ฒ ์ง๋ง ์ง๊ธ ํ์ ๋จธ๋ฆฌ ์์ ๋ ์ค๋ฅธ ๋ํ์ ์ธ ๋๋ค์ ๋ฐ๋ก ๋๋ฐ
์ด๋ค. ๋๋ฐ์ ๊ฐ์ฅ ์ํํ ์ ์ด ๋น๋ก ์ด๋ฒ ํ์๋ ์์์ง๋ง ๋ค์ ํ์๋ ๋๋ ๋ธ ์ ์์๊ฑฐ์ผ!
๋ผ๋ ํฌ๋ง์ธ๋ฐ, ์ด๋ฐ ํฌ๋ง์ ๋๋ฐํ ๋ ์ฌ์ฉํ๋ ๊ฒ์๋ค์ด ๋๋ค
์์ ๊ธฐ๋ฐํ๋ ๊ฒ์์ด๋ผ๋ ์๊ฐ์์ ์ถ๋ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ์ด๋ ์ ๋ ์ด๋นจ๊ฒ์์ด์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
๋๋ฒ์ ํ๋ก 2006๋736์๋ ๋๋ฐ์ ์ ์๋ฅผ ์ฌ๋ฌผ์ ๊ฑธ๊ณ ์ฐ์ฐ์ ์ํ์ฌ ์ฌ๋ฌผ์ ๋์ค์ ๊ฒฐ์ ํ๋ ๊ฒ
์ด๋ผ๊ณ ์ด์ผ๊ธฐํ๊ณ ์๋ค. ๋ํ์ ์ธ ๋๋ฐ์ธ ํ์นญ์ฝ, ์ฐ๋ค, ํฌ์ปค, ์ฃผ์ ๋ฑ๋ง ์ดํด๋ด๋ ๋์ถฉ ๊ฐ์ด ์จ๋ค.
ํ์๋ ๋๋ฐ์์ ์ฌ์ฉํ๋ ๊ฒ์์ ์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋๊ตฌ๋ ํด๋ดค์ ๋ฒํ ๊ฐ๋ฒผ์ด ๋๋ฐ์ ์๋ก ๋ค์ด๋ณด๊ฒ ๋ค. ํ์๊ฐ ์ค๊ณ ๋ฑํ์ ์์ ์ ๋ณด๋ธ 2000๋
๋์ ์ ๊ตญ์ ์ค, ๊ณ ๋ฑํ๊ต์์ ๋๋ฆฌ ํํด์ก๋ ๋์ด์ธ ํ์น๊ธฐ
์ด๋ค. ํ์น๊ธฐ๋ ์๋ ์ ๊ตญ์ ์ผ๋ก ์ ํํ๊ธฐ ๋๋ฌธ์ ํ์ ๋๋์ ๋
์๋ถ๋ค์ด๋ฉด ๋
์๋ถ๋ค์ด๋ฉด ํ๋ฒ ์ฏค์ ํด๋ดค๊ฑฐ๋ ์๋๋ฉด ์น๊ตฌ๋ค์ด ํ๋ ๊ฑธ ๋ณด๊ธฐ๋ ํ์ ๊ฑฐ๋ผ ๋ฏฟ๋๋ค.

๊ทธ๋๋ ํน์ ํ์น๊ธฐ๊ฐ ๋ญ์ง ๋ชจ๋ฅด๋ ๋ถ๋ค์ด ์์ ์ ์์ผ๋ ์ผ๋จ ๊ฐ๋จํ๊ฒ ๋ฃฐ์ ์ค๋ช ํ๊ฒ ๋ค.
- ์ ๋นํ ๋๊บผ์ด ๊ต๊ณผ์๋ฅผ ์ค๋นํ๋ค. ๊ตญ์ฌ์ฑ ์ด๋ ๋ฌผ๋ฆฌ์ฑ ์ฒ๋ผ ์ ๋นํ ๋๊บผ์ด ์ฑ ์ ์ฌ์ฉํ์.
- ๊ฐ์ ์ค๋นํ ๋์ ์ ๊ต๊ณผ์์ ์ฌ๋ฆฐ๋ค. ๋ณดํต 100์์ ๊ฑด๋ค.
- ์์๋๋ก ๊ต๊ณผ์๋ฅผ ์์ผ๋ก ๋๋ ค์ ๋์ ์ ๋ค์ง๋๋ค.
- ๋ชจ๋ ๋์ ์ ๋ค์ง์ด์ ๊ฐ์ ๋ฉด์ผ๋ก ๋ง๋ ์ฌ๋์ด ํ๋์ ๋ชจ๋ ๊ฐ์ ธ๊ฐ๋ค.
์์์ ์ผ๋ก ๊ต๊ณผ์๋ฅผ ์์ผ๋ก ๋๋ ธ์ ๋ n
๊ฐ์ ๋์ ์ด ๋ค์ง์ด ์ง ๊ฒ์ด๋ผ๋ ๊ณ์ฐ์ ํ๊ธฐ๋ ์ฝ์ง ์๋ค. ์ฆ, ํ์น๊ธฐ๋ ์ด๋ ์ ๋ ๋๋ค
์ ๊ธฐ๋ฐํ ๊ฒ์์ด๊ณ ๊ทธ๋์ ๋๋ฐ
์ ๊ธฐ๋ณธ์ ์ธ ํน์ฑ์ธ ์ฌํ์ฑ
์ ๊ฐ์ง ์ ์๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ ๋ก ํ๋ฒ ์ 246์กฐ 1ํญ๊ณผ ๊ตญ๋ด ๋๋ฐ๋ฒ ํ๋ก ์ ํ๊ต์์ ํ๋ ํ๋์ด ๋ช๋ฐฑ์ ์ ๋์ธ ํ์น๊ธฐ๋ ์ผ์ ์ค๋ฝ์ผ๋ก ํ์ ๋ฐ์์ ๋ฌด์ฃ์ด์ง๋ง, ์๋ฌด๋ฆฌ ํ์น๊ธฐ๋ผ๊ณ ํด๋ ๋ช๋ฐฑ๋ง์ ์์ค์ ๋์ด ์๋ค๊ฐ๋ค ํ๋ ์์ค์ด๋ฉด ๋๋ฐ์ฃ๋ก ์ฒ๋ฒ๋ฐ์ ์ ์๋ค๋ ์ ์์๋์.(๋ฌผ๋ก ์ ์ ๋ ๋์ด ์๋ ์ฌ๋๋ค์ด๋ฉด ํ์น๊ธฐ๋ง๊ณ ๋ค๋ฅธ ๊ฑธ ํ๋คโฆ)
๊ทธ๋ผ ์ด ์ฏค์์ ์ฒ์์ ๊ทธ ์ง๋ฌธ์ ํ๋ฒ ๋์ ธ๋ณด๊ฒ ๋ค.
์ด๊ฒ ์ ๋ง๋ก ๋๋ค์ผ๊น?
์์ ์ ํ์์ ํ์ฐฝ์์ ์ ์๊ฐํด๋ด๋ ํ๊ต์ 1~2๋ช ์ฉ ํ์น๊ธฐ์ ์ ๋ ๊ณ ์๋ค์ด ์์๋๋ฐ ์ด ์น๊ตฌ๋ค์ ์์ ์ด ์ํ๋ ๋์ ๋ง ์ ํํ ๋ค์ง์ ์ ์๋ ๋ฅ๋ ฅ์ ๋ณด์ ํ๊ณ ์์๋ค. ์์ ์ TV์์๋ ํ์น๊ธฐ์ ๊ณ ์๋ผ๊ณ ๋์จ ๋ถ์ด ์์๋๋ฐ ์ด ๋ถ์ ๋ญ ๊ฑฐ์ ๋ฅํฐ ์คํธ๋ ์ธ์ง ์์ค์ด์๋ค.

์ฌ์ค ํ์น๊ธฐ๋ ๊ฒฐ๊ตญ์ ๋ฌผ๋ฆฌ ๋ฒ์น ๋ด์์ ๋์๊ฐ๋ ํ์ด๊ธฐ ๋๋ฌธ์ ํ๋์ผ๋ก ๊ฑธ๋ฆฐ ๋์ ์ ๋ฌด๊ฒ, ํ์ ๋ด๋ ค์น๋ ํ, ํ์ผ๋ก ์ฌ์ฉ๋ ๊ต๊ณผ์์ ํ๋ ฅ์ฑ ๋ฑ ๋ช๊ฐ์ง ๋ณ์๋ฅผ ์๋ฉด ์ด๋ ๋์ ์ด ๋ค์ง์ด ์ง์ง๋ ๊ณ์ฐํ ์ ์์ ๊ฒ์ด๋ค. ๋ฌผ๋ก ์ด๋ ๊ฒ ๊ณ์ฐํ๋ ๊ฒ์ด ์ฌ์ด ์ผ์ ์๋๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ง์ ํ ์๋ฏธ์ ๋๋ค
์ด ์๋๋๋ผ๋ ์ด ์ ๋๋ฉด ๊ทธ๋ฅ ๋๋ค
ํ๋ค๊ณ ์น๋ ๊ฒ์ด๋ค.
์ฆ, ์ฐ๋ฆฌ ์ฃผ๋ณ์์๋ ์ง์ ํ ์๋ฏธ์ ๋๋ค์ ๊ทธ๋ ๊ฒ ๋ง์ง ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๋จ์ง ์ฐ๋ฆฌ๊ฐ ๋๋คํ๋ค๊ณ ์๊ฐํ ๋ฟ์ด๋ค.
์ปดํจํฐ์์์ ๋๋ค
์ฌ์ค ์ฐ๋ฆฌ๊ฐ ์ผ์์์ ์ด๋ ์ ๋ ์ฐ์ฐ์ฑ์ด ์๋ค๋ฉด ๋๋คํ๋ค๊ณ ํ๋ฏ์ด ์ปดํจํฐ๋ ์ง์ ํ ์๋ฏธ์ ๋๋ค์ ๋ง๋ค์ด ๋ด๋ ๊ฒ์ด ์๋๋ผ ์ด๋ ์ ๋ ๋ฉ๋ํ ๋งํ ์ฐ์ฐ์ฑ์ ๋ง๋ค์ด ๋ด๊ณ ์ด๋ฅผ ๋๋คํ๋ค๊ณ ํ๋ค. ๊ฒ๋ค๊ฐ ์ปดํจํฐ๋ก ๋ญ๊ฐ๋ฅผ ๋ง๋๋ ค๋ฉด ์ด๋ ํ ๊ท์น์ ๋ง๋ค์ด์ค์ผ ํ๋๋ฐ, ์ด๋ ํ ๊ท์น์ผ๋ก ๊ท์น์ด ์๋ ๋๋ค์ ์์ฑํ๋ค๋ ๋ง ์์ฒด๊ฐ ๋ชจ์์ด๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋๋ค์ ์๋์ง๋ง ๋๋ค์ ๊ฐ๊น์ด ์ ์ฌ ๋๋ค(Pseudo Random)
๋ฐ์ ๋ง๋ค ์ ๋ฐ์ ์๋ ๊ฒ์ด๋ค. ๋ํ ์ปดํจํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ซ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ผ์ข
์ ๊ณ์ฐ๊ธฐ์ด๊ธฐ ๋๋ฌธ์ ๋๋คํ ์ฌ๊ฑด์ ๋ง๋ค๊ธฐ ์ํด์๋ ๋์
, ์ฆ ๋๋คํ ์๋ฅผ ๋ฝ์ ๋ผ ์ ์์ด์ผ ํ๋ค.
๊ทธ๋ผ ์ปดํจํฐ๋ ์ด๋ป๊ฒ ์ด๋ฐ ๋์ ์์ฑ์ ํ๋ ๊ฑธ๊น?
์ค์์ ๊ณฑ๋ฒ(Mid Square Method)
์ค์์ ๊ณฑ๋ฒ
์ ํฐ ๋
ธ์ด๋ง์ด 1949๋
์ ๊ณ ์ํ ์ ์ฌ ๋์ ์์ฑ๋ฒ์ผ๋ก, ์์์ ์ซ์๋ฅผ ์ ๊ณฑํ ๋ค์ ์ด ์ซ์์ ์ผ๋ถ๋ถ์ ๊ฐ์ ธ์์ ์๋ก์ด ๋์๋ก ๋ง๋ค์ด๋ด๋ ๋ฐฉ๋ฒ์ด๋ค.
์์์ 4์๋ฆฌ ๋์๋ฅผ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ด๊ธฐ ๊ฐ์ ์ฌํํ๊ฒ 1234
๋ก ๊ฐ๊ฒ ๋ค.
ํ์ด์ฆ | ๋์๊ฐ | ์ ๊ณฑ๊ฐ | ๋์ |
---|---|---|---|
0 | 1234 | 1522756 | 1522756 |
1 | 5227 | 27321529 | 27321529 |
2 | 3215 | 10336225 | 10336225 |
์ด๋ฐ ์์ผ๋ก ๊ณ์ ์ค์์ ์๋ ๊ฐ์ ๋นผ์์ ์ ๊ณฑํ๋ฉด์ ์์์ ๋์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ์ค์์ ๊ณฑ๋ฒ
์ด๋ค. ๋ญ๊ฐ ๋ฑ๋ด๋ ์์ธกํ๊ธฐ ์ฌ์๋ณด์ธ๋ค. ์๋ฌด๋๋ ํฐ ๋
ธ์ด๋ง ํ์ด ํ๋ํ๋ 1950๋
๋์ ๊ฐ๋ฐ๋ ์๊ณ ๋ฆฌ์ฆ์ด๊ณ , ๊ทธ ๋น์ ์ปดํจํฐ์ ์ฑ๋ฅ์ ๋๋ฌผ๋๊ธฐ ๊ทธ์ง ์์์ผ๋ฏ๋ก ์ต๋ํ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ด ๋ฐฉ๋ฒ์ ์์ฆ์๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค.
์ ํํฉ๋๋ฒ(Linear Congruential Method)
์ ํํฉ๋๋ฒ
์ C์ rand
ํจ์์์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ์ฌ๊ท ๊ด๊ณ์์ผ๋ก ์ ์๋๋ฉฐ ๋์๋ค์ ์์ด์ ๋ฐํํ๋ค.
์ฌ๊ธฐ์ ๋ ๋์๋ก ๋ ์์ด์ด๊ณ ๋๋จธ์ง๋ ๊ทธ๋ฅ ์์์ ์ ์์ด๋ค. ์ฐธ๊ณ ๋ก ANSI C ํ์ค์ ๋ก ์ ํด์ ธ์๋ค. ๊ทธ๋ผ ๊ฐ๋จํ๊ฒ ํ๋ฒ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํด๋ณด์.
let m = 2 ** 31;
const a = 1103515245;
const c = 12345;
function rand (x) {
return (((x * a) + c) % m);
}
function getRandomNumbers (randCount = 1) {
// ํ์ฌ ์๊ฐ์ ์ฌ์ฉํ์ฌ ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋ค.
const initial = new Date().getTime();
const randomNumbers = [initial];
for (let i = 0; i < randCount; i++) {
randomNumbers.push(rand(randomNumbers[i]));
}
randomNumbers.shift();
return randomNumbers;
}
console.log(getRandomNumbers(10));
์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์ฝ์์ ๋ถํ๋ฃ๊ณ ์คํ์์ผ๋ณด๋ฉด ์ธ์๋ก ์ฃผ์๋ 10๋งํผ์ ๊ธธ์ด๋ฅผ ๊ฐ์ง ๋์ ๋ฐฐ์ด์ด ์ถ๋ ฅ๋๋ค.
(10) [1163074432, 465823232, 1719475776, 1744670976, 790949120, 552540416, 896259328, 1473241344, 1074855168, 575793408]
์ ํํฉ๋๋ฒ
์ ํน์ง์ ์ด์ ์ ์์ฑ๋ ๋์๋ฅผ ํ์ฉํ๋ค๋ ๊ฒ์ด๋ฉฐ ์ต๋ ๋งํผ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฐ์ง๋ฏ๋ก ์ต์
์ ๊ฒฝ์ฐ ๋งํผ์ ๋ฐ๋ณต ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ค. ํ์๊ฐ m
๋ณ์๋ฅผ let
ํค์๋๋ก ์ ์ธํ ๊ฑด ์ด ์ด์ ๋ค. ํ๋ฒ ๋ธ๋ผ์ฐ์ ์์ m
๋ณ์์ ์์ ์๋ฅผ ํ ๋นํ ๋ค์์ getRandomNumbers
ํจ์๋ฅผ ๋ค์ ํธ์ถํด๋ณด์. ๋์์ ๊ฒฝ์ฐ์ ์์ ๋์ผํ ๊ฐ์ด ์ถํ์ด ๋์ ๋๊ฒ ์ปค์ง๋ค๋ ๊ฒ์ ํ์ธํด๋ณผ ์ ์๋ค.
์ ํํฉ๋๋ฒ์ ๊ณ์ฐ์ด ๊ต์ฅํ ๊ฐ๋จํ๊ณ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด์ฐฝ๊ธฐ๋ถํฐ ์ปดํจํฐ์ ๋๋ฆฌ ์ฌ์ฉ๋์๋ค. ๊ทธ๋ฌ๋ ์ ํํฉ๋๋ฒ
์ ๋์์ ์ฃผ๊ธฐ์ฑ์ด ์๊ณ ์์ฑ๋์ด ๋์ค๋ ๋์๋ค ์ฌ์ด์ ์๊ด ๊ด๊ณ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง์ผ๋ก ์์ฑ๋ ๋์์ ๊ทธ ์ธ ๋ณ์๋ค๋ง ์๋ฉด ๊ทธ ๋ค์์ ์์ฑ๋ ๋์๋ฅผ ๋ชจ๋ ์์ธกํ ์ ์๋ค.
๋ฌธ์ ๋ ๊ทธ ๋ณ์๋ค์ด ANSI C ํ์ค์ผ๋ก ์ ํด์ ธ ์์ด์ ๋๊ตฌ๋ ์ง ๋ค ์ ์ ์๋ค๋ ์ ์ด๋ค. ์ฆ, ์กฐ๊ธ ์ง์์ด ์๋ ์ฌ๋์ด๋ฉด rand
ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ๋ค์ ๋์๋ฅผ ๋ฏธ๋ฆฌ ์์ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋์๊ฐ ์์ธก๋นํด๋ ์๊ด์๋ ๊ฒฝ์ฐ๋ ์๋ฒ ๋๋์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง ๋ชปํ๋ ์ ํ๋ ์ํฉ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
๋ฉ๋ฅด์ผ ํธ์์คํฐ(Mersenne Twister)
๋ฉ๋ฅด์ผ ํธ์์คํฐ
๋ ์์
, MATLAB, PHP, Python, R, C++ ๋ฑ์์ ์ฌ์ฉํ๊ณ ์๋ ๋์ ์์ฑ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉฐ, 1997๋
์ ๋ง์ธ ๋ชจํ ๋ง์ฝํ
์ ๋์๋ฌด๋ผ ๋ค์ฟ ์ง
๊ฐ ๊ฐ๋ฐํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ฉ๋ฅด์ผ ํธ์์คํฐ๋ผ๋ ์ด๋ฆ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋์ ๋ฐ๋ณต ์ฃผ๊ธฐ๊ฐ ๋ฉ๋ฅด์ผ ์์
์ธ๋ฐ์ ์ ๋ํ๋ค.
๋ฉ๋ฅด์ผ ์์๋ผ๊ณ ํ๋ฉด ๋ญ๊ฐ ๋๋จํ ์ ๊ฐ์๋ฐ ์ฌ์ค ๋ณ ๊ฑฐ ์๋ค. ๋ฉ๋ฅด์ผ ์
๋ ์ผ๋ก ๋ํ๋ด๋ฉฐ ์ ๊ทธ๋๋ก 2์ n์ ๊ณฑ์์ 1์ด ๋ชจ์๋ ์
๋ฅผ ๋งํ๋ ๊ฒ์ด๊ณ ๋ฉ๋ฅด์ผ ์์
๋ ๊ทธ๋ฅ ์ด ๋ฉ๋ฅด์ผ ์ ์ค์์ ์์์ธ ๊ฒ์ ๊ณ ๋ฅธ ๊ฒ์ด๋ค.
๋ณดํต ์ ๋์ ๋ฐ๋ณต ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ MT19937
์ด ๋ง์ด ์ฌ์ฉ๋๋๋ฐ, C++์์๋ ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฑํํด์ ์ฌ์ฉํ๊ณ ์๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋์ ์๋ฆฌ๋ฅผ ๊ฐ๋จํ๊ฒ ์ค๋ช
ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- seed๋ฅผ ์ฌ์ฉํ์ฌ 624 ๋งํผ์ ๊ธธ์ด๋ฅผ ๊ฐ์ง ๋ฒกํฐ๋ฅผ ์์ฑ. seed๋ ๋ณดํต ํ๋์จ์ด ๋ ธ์ด์ฆ๋ ์ค๋ ๋ ์ง๋ฅผ ์ฌ์ฉํ๋ค.
- ์ด ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ์ฌ 624๊ฐ์ ์ ์ฌ ๋์๋ฅผ ๋ง๋ ๋ค.
- ์ด ๋ฒกํฐ์ ๋ ธ์ด์ฆ๋ฅผ ์ค ํ ๋ค์ 2๋ฒ์ ๋ฐ๋ณต. ์ด ๋ ธ์ด์ฆ๋ฅผ ์ฃผ๋ ํ์๋ฅผ Twistํ๋ค๊ณ ํ๋ค.
์ด๋ 3๋ฒ์ Twist
ํ๋ ๊ณผ์ ์์ GFSR(Generalized Feedback Shift Register
๋ผ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. GFSR
์ ์๋ฃ๊ฐ ๋ง์ง ์๊ณ ๋๋ถ๋ถ ๋
ผ๋ฌธ๊ฐ์ ํ์ ์๋ฃ๋ง ์๋ ์ํฉ์ด๋ผ ํ์๊ฐ ์์ธํ ์์๋ณด์ง๋ ๋ชปํ์ผ๋, ์ด์ฌํ ๊ตฌ๊ธ๋งํ๊ณ ๋
ผ๋ฌธ๋ค์ ๋ฏ์ด๋ณธ ๊ฒฐ๊ณผ LFSR(Linear Feedback Shift Register)
๋ฅผ ์ฝ๊ฐ ๋ณํํ ๋ฐฉ๋ฒ์ด๋ผ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์์๋ค. (์ ๋ณด๊ฐ ๋๋ฌด ์ ํ์ ์ด๋ผ LFSR ๊ธฐ๋ฐ์ด ๋ง๋์ง๋ ์ ํํ์ง ์๋ค.)
LFSR
์ ์ด์ ์ํ ๊ฐ๋ค์ ๊ฐ์ ธ์์ ์ ํ ํจ์๋ฅผ ํตํด ๊ณ์ฐํ ํ ๊ทธ๊ฑธ ์ฌ์ฉํด์ ๋ค์ ๊ฐ์ ๋ง๋ค์ด ๋ด๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ ์ฌ์ฉํ๋ ํจ์๋ ๋ณดํต XOR
๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ ๋งจ ์ฒ์ ๊ฐ์ ์๋(Seed)
๋ผ๊ณ ๋ถ๋ฅธ๋ค.

LFSR
๋ฅผ ๊ฐ๋จํ ์ค๋ช
ํ์๋ฉด, ์ฐ์ ๋ช๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ณจ๋ผ๋๊ณ ์ด๊ธฐํ๋ ์ธํ์ธ ์๋๋ฅผ ๋ ์ง์คํฐ์ ๋ฐ์ด๋ฃ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ํ์นธ์ฉ ๋นํธ๊ฐ ๋ฐ๋ฆฌ๊ฒ(Shifting) ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๋ ๋์์ ์์ ธ๋์จ ํ๊ฐ์ ๋นํธ๋ฅผ ์์ํ์์ ์ป๊ฒ ๋๋ค. ๊ทธ ๋ค์ ๋ฏธ๋ฆฌ ๊ณจ๋ผ๋จ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ ๊ทผํด์ ๊ฐ์ ๋นผ์จ ๋ค์์ ์์๋๋ก ํ๋จ์ ์์นํ 3๊ฐ์ XOR
๊ฒ์ดํธ์ ํต๊ณผ์ํค๋ฉด ๋ค์ ์ธํ์ด ๋์ค๊ณ ๊ทธ๊ฑธ ๋ ๋ ์ง์คํฐ์ ๋ฐ์ด๋ฃ๋๊ฑธ ๋ฐ๋ณตํ๋ ๊ฒ์ด๋ค.
๋ฉ๋ฅด์ผ ํธ์์คํฐ๋ ๊ฒฐ๊ตญ์ LFSR
๊ฐ ์ฝ๊ฐ ๋ณํ๋ GFSR
๋ฅผ ์ฌ์ฉํ์ฌ ๋์๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ์ ์๋๋ฅผ ์์ฑํด์ค์ผํ๋ค.
๋ฉ๋ฅด์ผ ํธ์์คํฐ์ ์์ธํ ์๊ณ ๋ฆฌ์ฆ์ ์ํคํผ๋์์ Mersenne Twister - Algorithmic_detail์์ ํ์ธํ ์ ์๋ค. ํ์๋ 2002๋
์ ๋ง์ธ ๋ชจํ ๋ง์ฝํ
์ ๋์๋ฌด๋ผ ๋ค์ฟ ์ง
๊ฐ ์์ ๋ค์ ๋ฉ๋ฅด์ผ ํธ์์คํฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ํด์ ๋ค์ ์์ฑํ C์ MT19937
์๊ณ ๋ฆฌ์ฆ ์ฝ๋๋ฅผ ๋ณด๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ๋ฒ ํฌํ
ํด๋ณด์๋ค. ์ด ์ฝ๋๋ ์ต๋ 32bit ๊ธธ์ด์ ๋์๋ฅผ ์ฌ์ฉํ๋๋ก ์์ฑ๋์ด์๋ค. 64bit์ฉ ์๊ณ ๋ฆฌ์ฆ์ MT19937-64
๋ผ๊ณ ๋ ๋ฐ๋ก ์๋ค.
const N = 624;
const M = 397;
const F = 1812433253;
const UPPER_MASK = (2 ** 32) / 2; // 0x80000000
const LOWER_MASK = UPPER_MASK - 1; // 0x7fffffff
const MATRIX_A = 0x9908b0df;
class MersenneTwister {
constructor () {
const initSeed = new Date().getTime();
this.mt = new Array(N);
this.index = N + 1;
this.seedMt(initSeed);
}
seedMt (seed) {
let s;
this.mt[0] = seed >>> 0;
for (this.index = 1; this.index < N; this.index++) {
this.mt[this.index] = F * (this.mt[this.index - 1] ^ (this.mt[this.index - 1]) >>> 30) + this.index;
this.mt[this.index] &= 0xffffffff;
}
}
int () {
let y;
const mag01 = new Array(0, MATRIX_A);
if (this.index >= N) {
let kk;
if (this.index === N + 1) {
this.seedMt(5489);
}
for (kk = 0; kk < N - M; kk++) {
y = (this.mt[kk] & UPPER_MASK) | (this.mt[kk + 1] & LOWER_MASK);
this.mt[kk] = this.mt[kk + M] ^ (y >>> 1) ^ mag01[y & 1];
}
for (; kk < N - 1; kk++) {
y = (this.mt[kk] & UPPER_MASK) | (this.mt[kk + 1] & LOWER_MASK);
this.mt[kk] = this.mt[kk + (M - N)] ^ (y >>> 1) ^ mag01[y & 1];
}
y = (this.mt[N - 1] & UPPER_MASK) | (this.mt[0] & LOWER_MASK);
this.mt[N - 1] = this.mt[M - 1] ^ (y >>> 1) ^ mag01[y & 1];
this.index = 0;
}
y = this.mt[this.index++];
y ^= (y >>> 11);
y ^= (y << 7) & 0x9d2c5680;
y ^= (y << 15) & 0xefc60000;
y ^= (y >>> 18);
return y >>> 0;
};
}
์ฝ๋ ๋ด๋ถ์ ์ฌ์ฉ๋ ์์ F = 1812433253
, MATRIX_A = 0x9908b0df
, this.seedMt(5489)
๋ฑ์ ํ์๊ฐ ์์๋ก ๋ฃ์ ์๊ฐ ์๋๋ผ MT19937
์ ํ์ค ๊ณ์๋ก ์ ํด์ ธ ์๋ ์์ด๋ค.
์ฌ์ค ์๊ณ ๋ฆฌ์ฆ ์์ฒด๊ฐ ๋๋ฌด ๋ณต์กํด์ ํ์๋ ๋ค ์ดํดํ์ง๋ ๋ชปํ๋ค.(๋ํ ๋ ๊ณต๋ถ๋ฅผ ์ด์ฌํ ์ํ ์ฃโฆ) ๊ทธ๋๋ ์ผ๋จ ์ด๋ ๊ฒ ์ฝ๋๋ก ํ๋ฒ ์ง์ ์์ฑํด๋ณด๋ฉด ๊ธ๋ก๋ง ์ฝ์ ๋๋ณด๋ค๋ ํ์คํ ์กฐ๊ธ ๋ ์ดํด๊ฐ ๋๊ธฐ ๋๋ฌธ์ C๋ก ์์ฑ๋ ์๋ ์ฝ๋๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํฌํ ํ ๊ฒ์ด๋ค. ํ์๊ฐ ์ฐธ๊ณ ํ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ ์ฌ๊ธฐ์ ํ์ธํ ์ ์๋ค.
const rand = new MersenneTwister();
console.log(rand.int()); // 2145258025
์์ฑํ ์ฝ๋๋ฅผ ์ง์ ์คํํด๋ณด๋ ๋๋คํ ๋์๊ฐ ์ ์์ฑ์ด ๋๋ ๊ฒ ๊ฐ๋ค. ์ฌ์ค ๋์๊ฐ ์ ์์ฑ๋๋์ง ์ ํํ๊ฒ ๋ณด๋ ค๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํ ํ ๋์์ ๋ถํฌ๋๋ฅผ ๋ด์ผํ์ง๋ง ๊ท์ฐฎ์ ๊ด๊ณ๋ก ์ผ๋จ ํจ์คํ๊ฒ ๋ค. ์ฐธ๊ณ ๋ก ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋ ๋ง์ธ ๋ชจํ ๋ง์ฝํ ์ ํํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด ์ด ์๊ณ ๋ฆฌ์ฆ์ด ์ ์ด๋ฐ ์ด๋ฆ์ ๊ฐ์ง๊ฒ ๋์๋์ง ๋์์๋ค.
๋ง์ฝํ : Knuth ๊ต์๋์ด ์ด ์ด๋ฆ ๋ฐ์ํ๊ธฐ ๋๋ฌด ํ๋ค๋.
๋ค์ฟ ์ง: โฆ[๋ฉฐ์น ํ]
๋ง์ฝํ : ํ์ด ํ์ฟค, ๋ฉ๋ฅด์ผ ํธ์์คํฐ๋ ์ด๋? ๋ฉ๋ฅด์ผ ์์๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๊ณ , ์ํ์ Twisted GFSR(Generalized Feedback Shift Register)๋๊น.
๋ค์ฟ ์ง: ๊ธ์โฆ?
๋ง์ฝํ : ์ ์ง ์ ํธ์ฝ์คํฐ ๊ฐ์ด ๋ค๋ฆฌ๋ ๊ฑธ? ๋นจ๋ผ๋ณด์ด๊ธฐ๋ ํ๊ณ ๊ธฐ์ตํ๊ณ ์ฝ๊ณ ๋ฐ์ํ๊ธฐ ์ข๊ณ . ๊ทธ๋ฆฌ๊ณ ์ด๊ฑด ๋น๋ฐ์ธ๋ฐ ์ด ์ด๋ฆ์ ์ฐ๋ฆฌ๋ค์ ์ด๋์ ์ด ์จ์ด์์ง!(Makoto, Takuji)
๋ค์ฟ ์ง: โฆ
๋ง์ฝํ : ์์์ MT๋ก ๊ฐ๋๊ฑฐ๋ค?
๋ค์ฟ ์ง: ์โฆ๊ทธ๋๋์ค์ ์ฐ๋ฆฌ๋ Knuth ๊ต์๋์ผ๋ก๋ถํฐ โ์ข์ ์ด๋ฆ์ธ ๊ฒ ๊ฐ๋คโ๋ผ๋ ํธ์ง๋ฅผ ๋ฐ์๋ค.
๋ญ๊ฐ ๊นจ๋ฐ๋ํ ๋ง์ฝํ ํ๊ณผ ์๋์ปฌํ ๋ค์ฟ ์งํ ์ผ๋ฏธ๊ฐ ๋๋ณด์ธ๋ค. ๋ญ๊ฐ ์ด๋ฐ ๋๋จํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฐํ ์ฌ๋์ด์ง๋ง ์ฌ๋ ๋์๋๋ ๋ค์ด๋ฐ ๊ณผ์ ์ธ๋ฏ.
XOR ์ํํธ(XOR shift)
XOR ์ํํธ
๋ ๋ฉ๋ฅด์ผ ํธ์์คํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก Linear Feedback Shift Register
์ ๊ธฐ๋ฐ์ผ๋ก ํ ์์ฌ ๋์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ด๋ป๊ฒ ๋ณด๋ฉด ๋ฉ๋ฅด์ผ ํธ์์คํธ์ ํ์ํธํ์ด๋ผ๊ณ ๋ณผ ์๋ ์๋๋ฐ, ๋ฉ๋ฅด์ผ ํธ์์คํธ์ ์๋ฆฌ๋ ๋น์ทํ์ง๋ง ๊ตฌํ์ด ํจ์ฌ ๊ฐ๋จํ๊ณ ์๋์ด ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ์์ ์ฌ์ฉ๋๋ค.
XOR ์ํํธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๋ฌ ์ข
๋ฅ๊ฐ ์๋๋ฐ, 32bit
, 64bit
, 128bit
์ ์๋ฅผ ์ฌ์ฉํ๋ฉฐ ๊ฐ๊ฐ , , ์ ๋ฉ๋ฅด์ผ ์ ๋์ ๋ฐ๋ณต ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ค.
๊ทผ๋ฐ ์ด๊ฒ TestU01
์ด๋ผ๋ ๋์ ํ์ง ํ
์คํธ ํ๋ ์์ํฌ์ ํ
์คํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํด์ ์กฐ๊ธ ๋ฌธ์ ๊ฐ ์์๋ค. ์ด๊ฑธ ํต๊ณผํด์ผ ANSI C
ํ์ค์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ๋ช๊ฐ์ง ๋ณ์ข
์๊ณ ๋ฆฌ์ฆ์ด ๋์ค๊ฒ ๋์๋๋ฐ ๊ทธ ์ค ํ๋๊ฐ 128bit
๋ฅผ ์ฌ์ฉํ๋ XOR ์ํํธ 128
์ ๊ฐ๋ํ XOR ์ํํธ 128 +
๋ผ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.(๋ญ๊ฐ ๊ฒ์ ํ์์ ์ ๋ชฉ ๊ฐ๋คโฆ)
์ฐธ๊ณ ๋ก V8
, SpdierMonkey
, JavaScriptCore
๋ฑ ๋ฉ์ด์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๋ค์ด ์ฑํํ ๋์ ์์ฑ ์๊ณ ๋ฆฌ์ฆ์ด XOR ์ํํธ 128 +
์ด๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ 2016๋
11์์ Sebastiano Vigna
๋ผ๋ ๋ถ์ ์ํด ํํ์์ ๋ฐํ๋์๋ค. ๋
ผ๋ฌธ ๋ด์ฉ์ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์๋ค.
์ ๋ฐ์ ์ธ ์๋ฆฌ๋ ์์์ ์ค๋ช
ํ LFSR
์ ๋น์ทํ๋, V8
์์ง์์ Math.random
๋ฉ์๋๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ํ๋ฒ ์ดํด๋ณด์. ์๋ ์ฝ๋๋ C++๋ก ์์ฑ๋์ด์์ผ๋ ์ฌ๋ฌ๋ถ์ด ๋ธ๋ผ์ฐ์ ์์ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์คํ์์ผ๋ณผ ์ ์๋๋ก ๋์ผํ ๋ก์ง์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํฌํ
ํด์ ์์ฑํ๊ฒ ๋ค.
V8
๋ด๋ถ ์์ค ์ฝ๋๋ v8/src/base/utils/random-number-generator.h
์ XorShift128
๋ฉ์๋์ ์์ฑ๋์ด ์๋ค.
// xorshift128plus.js
const state = [1827981275, 1295982171];
function xorshift128plus () {
let s1 = state[0];
let s0 = state[1];
state[0] = s0;
s1 ^= s1 << 23;
s1 ^= s1 >> 17;
s1 ^= s0;
state[1] = s1;
console.log('๋ ์ง์คํฐ์ ํ์ฌ ์ํ -> ', state);
return state[0] + state[1];
}
console.log('์ด๊ธฐ ๋ ์ง์คํฐ ์ํ -> ', state);
for (let i = 0; i < 5; i++) {
console.log('๋์ -> ', xorshift128plus());
}
์ด๊ธฐ ๋ ์ง์คํฐ ์ํ -> [ 1827981275, 1295982171 ]
๋ ์ง์คํฐ์ ํ์ฌ ์ํ -> [ 1295982171, 867440954 ]
๋์ -> 2163423125
๋ ์ง์คํฐ์ ํ์ฌ ์ํ -> [ 867440954, 1393243966 ]
๋์ -> 2260684920
๋ ์ง์คํฐ์ ํ์ฌ ์ํ -> [ 1393243966, 37812574 ]
๋์ -> 1431056540
๋ ์ง์คํฐ์ ํ์ฌ ์ํ -> [ 37812574, 833890405 ]
๋์ -> 871702979
๋ ์ง์คํฐ์ ํ์ฌ ์ํ -> [ 833890405, 1661667227 ]
๋์ -> 2495557632
์ถ๋ ฅ๋ ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ๋ ์ง์คํฐ์ ์ํ๊ฐ ์ด๋ป๊ฒ ๋ณํ๊ณ ์๋์ง ์ ์ ์๋ค.
[1]
๋ฒ ์ธ๋ฑ์ค์ ์๋ ๊ฐ์ด [0]
๋ฒ ์ธ๋ฑ์ค๋ก ์ฎ๊ฒจ์ง๊ณ [1]
๋ฒ ์ธ๋ฑ์ค์ ์๋ก์ด ๋์๋ฅผ ๊ฝ์๋ฃ์ ํ ๋ ์์๋ฅผ ๋ํด์ ์ถ๋ ฅํ๊ณ ์๋ค๋ ๊ฑธ ์ ์ ์๋ค.
๊ณ์ฐ ๊ณผ์ ์ ๋ณด๋ฉด [1]
๋ฒ ์ธ๋ฑ์ค์ ์๋ก์ด ๊ฐ์ ๋ฃ์ ๋๋ ์ํํ
๋์ด ์ผ์ชฝ์ผ๋ก ์์ ธ๋์จ ๊ฐ์ธ [0]
๋ฒ ์ธ๋ฑ์ค์ ๊ฐ์ ์ฌ์ฉํ์ฌ XOR ์ํํ
์ ์งํํ๊ณ ๊ทธ ๊ฐ์ ๋ค์ [1]
๋ฒ ์ธ๋ฑ์ค์ ๋ฃ์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ํํ
ํ๋ ์์์ธ 23
, 17
์ XOR ์ํํ
128+
์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฐํ ๋ ์ฐ๊ตฌ๋ฅผ ํตํด ์ฐพ์๋ธ ์ต์ ์ ์์์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ํด๋น ๋
ผ๋ฌธ์ ๋ณด๋ฉด ๋ญ ์ด๊ฒ์ ๊ฒ ์๋ํด๋ณธ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ์ผ์ผํ ํ
์คํธํด์ ๋์จ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ ๋ํ๋ ํจ๊ป ์ฒจ๋ถ๋์ด์๋ค.
๋ง์น๋ฉฐ
์ฌ์ค ์ฒ์์๋ ๊ฐ๋ฒผ์ด ๋ง์์ผ๋ก ๋๋ค
์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋๋ฐ ์์๋ณด๋ค ์ํ์ ์ธ ๋ด์ฉ์ด ๋ง์ด ๋์์ ์ ์ง ์ด๋ ค์ด ํฌ์คํ
์ด ๋์ด๋ฒ๋ฆฐ ๊ฒ ๊ฐ๋ค.
์ฌ์ค ์ปดํจํฐ๋ผ๋ ๊ณ์ฐ๊ธฐ๋ก ์ง์ ํ ์๋ฏธ์ ๋์๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค. ์ต๊ทผ์ ๋ฏธ๊ตญ์์ ์์์ปดํจํฐ๋ฅผ ์ฌ์ฉํด์ ์ง์ ํ ์๋ฏธ์ ๋์๋ฅผ ์์ฑํ๋ ๋ฐ ์ฑ๊ณตํ๋ค๊ณ ํ์ง๋ง ์์์ปดํจํฐ๋ ์์ง์ ์ฐ๋ฆฌ์ ๋๋ฌด๋๋ ๋จผ ์ด์ผ๊ธฐ์ด๊ธฐ ๋๋ฌธ์ ๋ ผ์ธ๋ก ์น๊ฒ ๋ค.
ํ์๋ ์ฌ์ค ์ํ์ ๊ทธ๋ค์ง ์ข์ํ๋ ํธ์ ์๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์ํ์ ์ธ ์ฐ๊ตฌ๋ฅผ ํตํด ์์ฑ ๊ท์น์ด ์๋ ๋์
๋ฅผ ๋ง๋๋ ค๋ ๋ง์ ์ฌ๋๋ค์ ๋์ ์ ๋ณด๋ฉด, ํธํ๊ฒ ์์ ๋ ์ด์ด์์ ์ฝ๋ฉํ๊ณ ์๋ ํ์๋ก์จ๋ ์ด ๋ถ๋ค์๊ฒ ๊ต์ฅํ ๊ฐ์ฌํจ์ ๋๋๋ค.(๋ ์๋ ๊บผ์ผ ์๋งโฆ)

ํ์๋ ์ด ํฌ์คํ ์ ์์ฑํ๋ฉด์ ๋ ผ๋ฌธ๊ณผ ์ํคํผ๋์๋ฅผ ์์ฒญ ๋ค์ฌ๋ค๋ดค๋๋ฐ ์ค๋๋ง์ ์์ด์ ์์์ ๋๋ฌด ๋ง์ด ๋ด์ ๋จธ๋ฆฌ์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆฐ ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๊ฑด ๋ชฐ๋ผ๋ ๋ฉ๋ฅด์ผ ํธ์์คํธ ๊ฐ์ ๊ฒฝ์ฐ๋โฆ ์๋ ๋๋ฌด ๋ณต์กํ๋ค ์ธ๊ฐ์ ์ผ๋กโฆ
์ฐธ๊ณ ๋ก ์ด๊ฑฐ ๋ง๋ ๋ง์ธ ๋ชจํ ๋ง์ฝํ
๋์ ์ง๊ธ ํ๋ก์๋ง ๋ํ๊ต์ ์ํ ๋ํ์์์ ์กฐ๊ต์๋ก ๊ทผ๋ฌดํ๊ณ ๊ณ์ ๋ฐ, ์ด ์ ๋ ๋จธ๋ฆฌ๊ฐ ๋์ผ ๊ฐ๋จ์ ์ค ์ ์๋ ๊ฑด๊ฐ๋ผ๋ ์๊ฐ๋ ๋ ๋ค. ์์ ์ด๋๋๋ ๋ฒจโฆ
์ด์์ผ๋ก ์ปดํจํฐ๊ฐ ๋ง๋๋ ๋๋ค์ ์ ๋ง๋ก ๋๋คํ ๊น? ํฌ์คํ ์ ๋ง์น๋ค.
์ฐธ๊ณ ๋ฌธํ
XorShift - Wikipedia
Thereโs Math.random(), and then Thereโs Math.random() - V8 Dev
Futher scramblings of Marsagliaโs xorshift generators - Sebastiano Vigna
The Xorshit128+ random number generator fails BigCrush - Daniel Lemire
- Algorithm
- ์๊ณ ๋ฆฌ์ฆ
- ๋์์์ฑ
- ๋ฉ๋ฅด์ผ ํธ์์คํฐ
- Real Random
- ๋์
- ์๋ฐ์คํฌ๋ฆฝํธ
- JavaScript
- ์ํ
- ์ํธํ
๊ด๋ จ ํฌ์คํ ๋ณด๋ฌ๊ฐ๊ธฐ

์ต์ ๊ฐ๊ณผ ์ต๋ ๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๊ฒ ๋์์ฃผ๋ ํ(Heap)
ํ๋ก๊ทธ๋๋ฐ/์๊ณ ๋ฆฌ์ฆ
์ค์๊ฐ ๋ฐ์ดํฐ์ ํ๊ท ์ ํจ์จ์ ์ผ๋ก ๊ตฌํ๊ธฐ
ํ๋ก๊ทธ๋๋ฐ/์๊ณ ๋ฆฌ์ฆ![[JavaScript๋ก ์ค๋ ฅ ๊ตฌํํ๊ธฐ] 2. ์ฝ๋ฉํ๊ธฐ [JavaScript๋ก ์ค๋ ฅ ๊ตฌํํ๊ธฐ] 2. ์ฝ๋ฉํ๊ธฐ](/static/6c72a52042fa8bad71e5e927ca2d86d6/163a5/thumbnail.jpg)
[JavaScript๋ก ์ค๋ ฅ ๊ตฌํํ๊ธฐ] 2. ์ฝ๋ฉํ๊ธฐ
ํ๋ก๊ทธ๋๋ฐ/๊ทธ๋ํฝ์ค![[JavaScript๋ก ์ค๋ ฅ ๊ตฌํํ๊ธฐ] 1. ์ค๋ ฅ์ด๋ ๋ฌด์์ผ๊น? [JavaScript๋ก ์ค๋ ฅ ๊ตฌํํ๊ธฐ] 1. ์ค๋ ฅ์ด๋ ๋ฌด์์ผ๊น?](/static/6c72a52042fa8bad71e5e927ca2d86d6/163a5/thumbnail.jpg)
[JavaScript๋ก ์ค๋ ฅ ๊ตฌํํ๊ธฐ] 1. ์ค๋ ฅ์ด๋ ๋ฌด์์ผ๊น?
ํ๋ก๊ทธ๋๋ฐ/๊ทธ๋ํฝ์ค![[JavaScript๋ก ์ฒ์ฒด ๊ตฌํํ๊ธฐ] ํ์ฑ์ ์์ง์์ ๊ตฌํํด๋ณด์ [JavaScript๋ก ์ฒ์ฒด ๊ตฌํํ๊ธฐ] ํ์ฑ์ ์์ง์์ ๊ตฌํํด๋ณด์](/static/746a090a9954b09cea8d75079269697d/163a5/thumbnail.jpg)
[JavaScript๋ก ์ฒ์ฒด ๊ตฌํํ๊ธฐ] ํ์ฑ์ ์์ง์์ ๊ตฌํํด๋ณด์
ํ๋ก๊ทธ๋๋ฐ/๊ทธ๋ํฝ์ค