์ปดํ“จํ„ฐ๊ฐ€ ๋งŒ๋“œ๋Š” ๋žœ๋ค์€ ์ •๋ง๋กœ ๋žœ๋คํ• ๊นŒ?

    ์ปดํ“จํ„ฐ๊ฐ€ ๋งŒ๋“œ๋Š” ๋žœ๋ค์€ ์ •๋ง๋กœ ๋žœ๋คํ• ๊นŒ?


    ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋žœ๋ค์— ๋Œ€ํ•ด์„œ ํ•œ๋ฒˆ ์ด์•ผ๊ธฐ ํ•ด๋ณผ๊นŒ ํ•œ๋‹ค. ๋žœ๋ค์ด๋ž€ ์–ด๋–ค ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ด์ „ ์‚ฌ๊ฑด๊ณผ ๋‹ค์Œ ์‚ฌ๊ฑด์˜ ๊ทœ์น™์„ฑ์ด ๋ณด์ด์ง€ ์•Š๋Š”, ๋ง ๊ทธ๋Œ€๋กœ ๋ฌด์ž‘์œ„๋กœ ๋ฐœ์ƒํ•˜๋Š” ํŒจํ„ด์„ ์ด์•ผ๊ธฐํ•œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ปดํ“จํ„ฐ๋„ ๋žœ๋คํ•œ ํŒจํ„ด์„ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๊ณ  ๋˜ ์‹ค์ œ๋กœ๋„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค.

    ํ•˜์ง€๋งŒ ์ปดํ“จํ„ฐ๋Š” ์‚ฌ์‹ค ๊ทธ๋ƒฅ ๊ธฐ๋Šฅ์ด ๋งŽ์€ ๊ณ„์‚ฐ๊ธฐ์— ๋ถˆ๊ณผํ•˜๋‹ค. ๊ณ„์‚ฐ๊ธฐ๋Š” ์ž…๋ ฅ๋œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ด๋ฆฌ ์ €๋ฆฌ ๊ฐ€์ง€๊ณ  ๋†€๋‹ค๊ฐ€ ๊ฒฐ๊ณผ๊ฐ’์„ ๋‚ด๋†“๋Š” ๋ฌผ๊ฑด์ด๋‹ค. ๊ทผ๋ฐ ์ด๋Ÿฐ ๊ณ„์‚ฐ๊ธฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋žœ๋คํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ผ๊นŒ? ์šฐ๋ฆฌ๋Š” ์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์„ ์ฐพ๊ธฐ ์ „์— ๊ทผ๋ณธ์ ์œผ๋กœ ๋žœ๋ค์ด๋ž€ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ์ƒ๊ฐํ•ด๋ด์•ผํ•œ๋‹ค. ์ง„์งœ ๋ฌด์ž‘์œ„๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•˜๊ธฐ๋Š” ํ•˜๋Š” ๊ฑธ๊นŒ?

    ๋žœ๋ค(Random)์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ?

    ๋จผ์ €, ๋žœ๋ค์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ๋ฌด์ž‘์œ„๋กœ ๋ฐœ์ƒํ•˜๋Š” ์–ด๋– ํ•œ ํŒจํ„ด์ด๋‹ค.

    ์‚ฌ๋žŒ๋งˆ๋‹ค ์˜๊ฒฌ์ด ๋ถ„๋ถ„ํ•˜๊ฒ ์ง€๋งŒ ์ง€๊ธˆ ํ•„์ž ๋จธ๋ฆฌ ์†์— ๋– ์˜ค๋ฅธ ๋Œ€ํ‘œ์ ์ธ ๋žœ๋ค์€ ๋ฐ”๋กœ ๋„๋ฐ•์ด๋‹ค. ๋„๋ฐ•์˜ ๊ฐ€์žฅ ์œ„ํ—˜ํ•œ ์ ์ด ๋น„๋ก ์ด๋ฒˆ ํŒ์—๋Š” ์žƒ์—ˆ์ง€๋งŒ ๋‹ค์Œ ํŒ์—๋Š” ๋‚˜๋„ ๋”ธ ์ˆ˜ ์žˆ์„๊ฑฐ์•ผ!๋ผ๋Š” ํฌ๋ง์ธ๋ฐ, ์ด๋Ÿฐ ํฌ๋ง์€ ๋„๋ฐ•ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ์ž„๋“ค์ด ๋žœ๋ค์—์„œ ๊ธฐ๋ฐ˜ํ•˜๋Š” ๊ฒŒ์ž„์ด๋ผ๋Š” ์ƒ๊ฐ์—์„œ ์ถœ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, ์–ด๋А ์ •๋„ ์šด๋นจ๊ฒŒ์ž„์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    ๋Œ€๋ฒ•์› ํŒ๋ก€ 2006๋„736์—๋„ ๋„๋ฐ•์˜ ์ •์˜๋ฅผ ์žฌ๋ฌผ์„ ๊ฑธ๊ณ  ์šฐ์—ฐ์— ์˜ํ•˜์—ฌ ์žฌ๋ฌผ์˜ ๋“์‹ค์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๋„๋ฐ•์ธ ํŒŒ์นญ์ฝ”, ์„ฐ๋‹ค, ํฌ์ปค, ์ฃผ์‹ ๋“ฑ๋งŒ ์‚ดํŽด๋ด๋„ ๋Œ€์ถฉ ๊ฐ์ด ์˜จ๋‹ค.

    ํ•„์ž๋Š” ๋„๋ฐ•์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ์ž„์„ ์ž˜ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ„๊ตฌ๋‚˜ ํ•ด๋ดค์„ ๋ฒ•ํ•œ ๊ฐ€๋ฒผ์šด ๋„๋ฐ•์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ๋‹ค. ํ•„์ž๊ฐ€ ์ค‘๊ณ ๋“ฑํ•™์ƒ ์‹œ์ ˆ์„ ๋ณด๋‚ธ 2000๋…„๋Œ€์— ์ „๊ตญ์˜ ์ค‘, ๊ณ ๋“ฑํ•™๊ต์—์„œ ๋„๋ฆฌ ํ–‰ํ•ด์กŒ๋˜ ๋†€์ด์ธ ํŒ์น˜๊ธฐ์ด๋‹ค. ํŒ์น˜๊ธฐ๋Š” ์›Œ๋‚™ ์ „๊ตญ์ ์œผ๋กœ ์œ ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์ž ๋˜๋ž˜์˜ ๋…์ž๋ถ„๋“ค์ด๋ฉด ๋…์ž๋ถ„๋“ค์ด๋ฉด ํ•œ๋ฒˆ ์ฏค์€ ํ•ด๋ดค๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ์นœ๊ตฌ๋“ค์ด ํ•˜๋Š” ๊ฑธ ๋ณด๊ธฐ๋Š” ํ–ˆ์„ ๊ฑฐ๋ผ ๋ฏฟ๋Š”๋‹ค.

    pan 판치기하다가 선생님들한테 걸리면 교무실로 끌려가서 바로 빠따행이었다.

    ๊ทธ๋ž˜๋„ ํ˜น์‹œ ํŒ์น˜๊ธฐ๊ฐ€ ๋ญ”์ง€ ๋ชจ๋ฅด๋Š” ๋ถ„๋“ค์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ผ๋‹จ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฃฐ์„ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

    1. ์ ๋‹นํžˆ ๋‘๊บผ์šด ๊ต๊ณผ์„œ๋ฅผ ์ค€๋น„ํ•œ๋‹ค. ๊ตญ์‚ฌ์ฑ…์ด๋‚˜ ๋ฌผ๋ฆฌ์ฑ…์ฒ˜๋Ÿผ ์ ๋‹นํžˆ ๋‘๊บผ์šด ์ฑ…์„ ์‚ฌ์šฉํ•˜์ž.
    2. ๊ฐ์ž ์ค€๋น„ํ•œ ๋™์ „์„ ๊ต๊ณผ์„œ์— ์˜ฌ๋ฆฐ๋‹ค. ๋ณดํ†ต 100์›์„ ๊ฑด๋‹ค.
    3. ์ˆœ์„œ๋Œ€๋กœ ๊ต๊ณผ์„œ๋ฅผ ์†์œผ๋กœ ๋•Œ๋ ค์„œ ๋™์ „์„ ๋’ค์ง‘๋Š”๋‹ค.
    4. ๋ชจ๋“  ๋™์ „์„ ๋’ค์ง‘์–ด์„œ ๊ฐ™์€ ๋ฉด์œผ๋กœ ๋งŒ๋“  ์‚ฌ๋žŒ์ด ํŒ๋ˆ์„ ๋ชจ๋‘ ๊ฐ€์ ธ๊ฐ„๋‹ค.

    ์ƒ์‹์ ์œผ๋กœ ๊ต๊ณผ์„œ๋ฅผ ์†์œผ๋กœ ๋•Œ๋ ธ์„ ๋•Œ 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ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฌ๊ท€ ๊ด€๊ณ„์‹์œผ๋กœ ์ •์˜๋˜๋ฉฐ ๋‚œ์ˆ˜๋“ค์˜ ์ˆ˜์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    Xn+1=(aXn+c)modโ€‰โ€‰mX_{n+1} = (aX_n + c) \mod m

    ์—ฌ๊ธฐ์„œ XX๋Š” ๋‚œ์ˆ˜๋กœ ๋œ ์ˆ˜์—ด์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ทธ๋ƒฅ ์ž„์˜์˜ ์ •์ˆ˜์ด๋‹ค. ์ฐธ๊ณ ๋กœ ANSI C ํ‘œ์ค€์€ m=231,a=1103515245,c=12345m = 2^{31}, a = 1103515245, c = 12345๋กœ ์ •ํ•ด์ ธ์žˆ๋‹ค. ๊ทธ๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•œ๋ฒˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด๋ณด์ž.

    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]

    ์„ ํ˜•ํ•ฉ๋™๋ฒ•์˜ ํŠน์ง•์€ ์ด์ „์— ์ƒ์„ฑ๋œ ๋‚œ์ˆ˜๋ฅผ ํ™œ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋ฉฐ ์ตœ๋Œ€ mm๋งŒํผ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ mm ๋งŒํผ์˜ ๋ฐ˜๋ณต ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ํ•„์ž๊ฐ€ m ๋ณ€์ˆ˜๋ฅผ let ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๊ฑด ์ด ์ด์œ ๋‹ค. ํ•œ๋ฒˆ ๋ธŒ๋ผ์šฐ์ €์—์„œ m ๋ณ€์ˆ˜์— ์ž‘์€ ์ˆ˜๋ฅผ ํ• ๋‹นํ•œ ๋‹ค์Œ์— getRandomNumbers ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด๋ณด์ž. ๋‚œ์ˆ˜์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ๋™์ผํ•œ ๊ฐ’์ด ์ถœํ˜„์ด ๋ˆˆ์— ๋„๊ฒŒ ์ปค์ง„๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ์„ ํ˜•ํ•ฉ๋™๋ฒ•์€ ๊ณ„์‚ฐ์ด ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ์ฐฝ๊ธฐ๋ถ€ํ„ฐ ์ปดํ“จํ„ฐ์— ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„ ํ˜•ํ•ฉ๋™๋ฒ•์€ ๋‚œ์ˆ˜์— ์ฃผ๊ธฐ์„ฑ์ด ์žˆ๊ณ  ์ƒ์„ฑ๋˜์–ด ๋‚˜์˜ค๋Š” ๋‚œ์ˆ˜๋“ค ์‚ฌ์ด์— ์ƒ๊ด€ ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒ์„ฑ๋œ ๋‚œ์ˆ˜์™€ ๊ทธ ์™ธ ๋ณ€์ˆ˜๋“ค๋งŒ ์•Œ๋ฉด ๊ทธ ๋‹ค์Œ์— ์ƒ์„ฑ๋  ๋‚œ์ˆ˜๋ฅผ ๋ชจ๋‘ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋ฌธ์ œ๋Š” ๊ทธ ๋ณ€์ˆ˜๋“ค์ด ANSI C ํ‘œ์ค€์œผ๋กœ ์ •ํ•ด์ ธ ์žˆ์–ด์„œ ๋ˆ„๊ตฌ๋“ ์ง€ ๋‹ค ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์ฆ‰, ์กฐ๊ธˆ ์ง€์‹์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด๋ฉด rand ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ๋‹ค์Œ ๋‚œ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋ž˜์„œ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‚œ์ˆ˜๊ฐ€ ์˜ˆ์ธก๋‹นํ•ด๋„ ์ƒ๊ด€์—†๋Š” ๊ฒฝ์šฐ๋‚˜ ์ž„๋ฒ ๋””๋“œ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์ œํ•œ๋œ ์ƒํ™ฉ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

    ๋ฉ”๋ฅด์„ผ ํŠธ์œ„์Šคํ„ฐ(Mersenne Twister)

    ๋ฉ”๋ฅด์„ผ ํŠธ์œ„์Šคํ„ฐ๋Š” ์—‘์…€, MATLAB, PHP, Python, R, C++ ๋“ฑ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋‚œ์ˆ˜ ์ƒ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ, 1997๋…„์— ๋งˆ์ธ ๋ชจํ†  ๋งˆ์ฝ”ํ† ์™€ ๋‹ˆ์‹œ๋ฌด๋ผ ๋‹ค์ฟ ์ง€๊ฐ€ ๊ฐœ๋ฐœํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋ฉ”๋ฅด์„ผ ํŠธ์œ„์Šคํ„ฐ๋ผ๋Š” ์ด๋ฆ„์€ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋‚œ์ˆ˜ ๋ฐ˜๋ณต ์ฃผ๊ธฐ๊ฐ€ ๋ฉ”๋ฅด์„ผ ์†Œ์ˆ˜์ธ๋ฐ์„œ ์œ ๋ž˜ํ–ˆ๋‹ค.

    ๋ฉ”๋ฅด์„ผ ์†Œ์ˆ˜๋ผ๊ณ  ํ•˜๋ฉด ๋ญ”๊ฐ€ ๋Œ€๋‹จํ•œ ์ˆ˜ ๊ฐ™์€๋ฐ ์‚ฌ์‹ค ๋ณ„ ๊ฑฐ ์—†๋‹ค. ๋ฉ”๋ฅด์„ผ ์ˆ˜๋Š” Mn=2nโˆ’1M_n = 2^{n} - 1์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์‹ ๊ทธ๋Œ€๋กœ 2์˜ n์ œ๊ณฑ์—์„œ 1์ด ๋ชจ์ž๋ž€ ์ˆ˜๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๊ณ  ๋ฉ”๋ฅด์„ผ ์†Œ์ˆ˜๋Š” ๊ทธ๋ƒฅ ์ด ๋ฉ”๋ฅด์„ผ ์ˆ˜ ์ค‘์—์„œ ์†Œ์ˆ˜์ธ ๊ฒƒ์„ ๊ณ ๋ฅธ ๊ฒƒ์ด๋‹ค.

    ๋ณดํ†ต 219937โˆ’12^{19937} - 1์˜ ๋‚œ์ˆ˜ ๋ฐ˜๋ณต ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” MT19937์ด ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ, C++์—์„œ๋„ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฑ„ํƒํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    1. seed๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 624 ๋งŒํผ์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑ. seed๋Š” ๋ณดํ†ต ํ•˜๋“œ์›จ์–ด ๋…ธ์ด์ฆˆ๋‚˜ ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    2. ์ด ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 624๊ฐœ์˜ ์œ ์‚ฌ ๋‚œ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.
    3. ์ด ๋ฒกํ„ฐ์— ๋…ธ์ด์ฆˆ๋ฅผ ์ค€ ํ›„ ๋‹ค์‹œ 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์˜ ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ฐ๊ฐ 232โˆ’12^{32} -1, 264โˆ’12^{64} - 1, 2128โˆ’12^{128} - 1์˜ ๋ฉ”๋ฅด์„ผ ์ˆ˜ ๋‚œ์ˆ˜ ๋ฐ˜๋ณต ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

    ๊ทผ๋ฐ ์ด๊ฒŒ 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+ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์—ฐ๊ตฌ๋ฅผ ํ†ตํ•ด ์ฐพ์•„๋‚ธ ์ตœ์ ์˜ ์ƒ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ๋…ผ๋ฌธ์„ ๋ณด๋ฉด ๋ญ ์ด๊ฒƒ์ €๊ฒƒ ์‹œ๋„ํ•ด๋ณธ ๋‹ค์Œ์— ๊ฒฐ๊ณผ๋ฅผ ์ผ์ผํžˆ ํ…Œ์ŠคํŠธํ•ด์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•œ ๋„ํ‘œ๋„ ํ•จ๊ป˜ ์ฒจ๋ถ€๋˜์–ด์žˆ๋‹ค.

    ๋งˆ์น˜๋ฉฐ

    ์‚ฌ์‹ค ์ฒ˜์Œ์—๋Š” ๊ฐ€๋ฒผ์šด ๋งˆ์Œ์œผ๋กœ ๋žœ๋ค์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์˜ˆ์ƒ๋ณด๋‹ค ์ˆ˜ํ•™์ ์ธ ๋‚ด์šฉ์ด ๋งŽ์ด ๋‚˜์™€์„œ ์™ ์ง€ ์–ด๋ ค์šด ํฌ์ŠคํŒ…์ด ๋˜์–ด๋ฒ„๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค.

    ์‚ฌ์‹ค ์ปดํ“จํ„ฐ๋ผ๋Š” ๊ณ„์‚ฐ๊ธฐ๋กœ ์ง„์ •ํ•œ ์˜๋ฏธ์˜ ๋‚œ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ตœ๊ทผ์— ๋ฏธ๊ตญ์—์„œ ์–‘์ž์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง„์ •ํ•œ ์˜๋ฏธ์˜ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ–ˆ๋‹ค๊ณ  ํ•˜์ง€๋งŒ ์–‘์ž์ปดํ“จํ„ฐ๋Š” ์•„์ง์€ ์šฐ๋ฆฌ์™€ ๋„ˆ๋ฌด๋‚˜๋„ ๋จผ ์ด์•ผ๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋…ผ์™ธ๋กœ ์น˜๊ฒ ๋‹ค.

    ํ•„์ž๋„ ์‚ฌ์‹ค ์ˆ˜ํ•™์„ ๊ทธ๋‹ค์ง€ ์ข‹์•„ํ•˜๋Š” ํŽธ์€ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ˆ˜ํ•™์ ์ธ ์—ฐ๊ตฌ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ ๊ทœ์น™์ด ์—†๋Š” ๋‚œ์ˆ˜๋ฅผ ๋งŒ๋“œ๋ ค๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์˜ ๋„์ „์„ ๋ณด๋ฉด, ํŽธํ•˜๊ฒŒ ์ƒ์œ„ ๋ ˆ์ด์–ด์—์„œ ์ฝ”๋”ฉํ•˜๊ณ  ์žˆ๋Š” ํ•„์ž๋กœ์จ๋Š” ์ด ๋ถ„๋“ค์—๊ฒŒ ๊ต‰์žฅํžˆ ๊ฐ์‚ฌํ•จ์„ ๋А๋‚€๋‹ค.(๋‚œ ์•ˆ๋ ๊บผ์•ผ ์•„๋งˆโ€ฆ)

    thanks 연구원 분들이 기반 알고리즘을 만들어주시면 열심히 상용 어플리케이션에 써먹겠습니다...!!!

    ํ•„์ž๋Š” ์ด ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•˜๋ฉด์„œ ๋…ผ๋ฌธ๊ณผ ์œ„ํ‚คํ”ผ๋””์•„๋ฅผ ์—„์ฒญ ๋“ค์—ฌ๋‹ค๋ดค๋Š”๋ฐ ์˜ค๋žœ๋งŒ์— ์˜์–ด์™€ ์ˆ˜์‹์„ ๋„ˆ๋ฌด ๋งŽ์ด ๋ด์„œ ๋จธ๋ฆฌ์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฐ ์ƒํƒœ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๊ฑด ๋ชฐ๋ผ๋„ ๋ฉ”๋ฅด์„ผ ํŠธ์œ„์ŠคํŠธ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š”โ€ฆ ์•„๋‹ˆ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋‹ค ์ธ๊ฐ„์ ์œผ๋กœโ€ฆ

    ์ฐธ๊ณ ๋กœ ์ด๊ฑฐ ๋งŒ๋“  ๋งˆ์ธ ๋ชจํ†  ๋งˆ์ฝ”ํ† ๋‹˜์€ ์ง€๊ธˆ ํžˆ๋กœ์‹œ๋งˆ ๋Œ€ํ•™๊ต์˜ ์ˆ˜ํ•™ ๋Œ€ํ•™์›์—์„œ ์กฐ๊ต์ˆ˜๋กœ ๊ทผ๋ฌดํ•˜๊ณ  ๊ณ„์‹ ๋ฐ, ์ด ์ •๋„ ๋จธ๋ฆฌ๊ฐ€ ๋˜์•ผ ๊ฐ•๋‹จ์— ์„ค ์ˆ˜ ์žˆ๋Š” ๊ฑด๊ฐ€๋ผ๋Š” ์ƒ๊ฐ๋„ ๋“ ๋‹ค. ์™„์ „ ์–ด๋‚˜๋”๋ ˆ๋ฒจโ€ฆ

    ์ด์ƒ์œผ๋กœ ์ปดํ“จํ„ฐ๊ฐ€ ๋งŒ๋“œ๋Š” ๋žœ๋ค์€ ์ •๋ง๋กœ ๋žœ๋คํ• ๊นŒ? ํฌ์ŠคํŒ…์„ ๋งˆ์นœ๋‹ค.


    ์ฐธ๊ณ ๋ฌธํ—Œ

    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

    Evan Moon

    ๐Ÿข ๊ฑฐ๋ถ์ด์ฒ˜๋Ÿผ ์‚ด์ž

    ๊ฐœ๋ฐœ์„ ์ž˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ฐœ์„ ์ฆ๊ธฐ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ ์ƒ๊ฐ ์ •๋ฆฌ๋ถ€ํ„ฐ ํŠœํ† ๋ฆฌ์–ผ, ์‚ฝ์งˆ๊ธฐ ์ •๋„๋ฅผ ์ฃผ๋กœ ๋„์ ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.