난수 생성기 · 주사위 · 동전 던지기

범위와 개수를 정하고 생성을 누르면 숫자 목록이 나옵니다. 중복 없이 뽑으면 추첨·순번 정하기에, 소수점을 켜면 실험용 샘플 값에 쓸 수 있습니다. 주사위 모드는 1~6을 N개 굴리고 합계를 보여 주며, 동전 모드는 앞면·뒷면을 세어 줍니다.

1~1000
0이면 정수. 숫자 모드에만 적용
난수 생성기 · 주사위 · 동전 던지기모두의계산기

Math.random을 쓰지 않는 이유

자바스크립트의 Math.random()은 통계적으로는 고르게 나오지만 내부 상태를 알면 다음 값을 예측할 수 있는 의사난수입니다. 게임 점수판 정도에는 충분해도 추첨·보안 토큰처럼 공정성이 필요한 곳에는 맞지 않습니다. 이 도구는 운영체제의 난수원을 쓰는 crypto.getRandomValues()만 사용하며, 정수 범위를 뽑을 때는 32비트 값을 범위로 나눈 나머지를 그대로 쓰면 작은 수가 미세하게 더 자주 나오는 편향(modulo bias)이 생기므로, 범위의 배수를 넘는 값은 버리고 다시 뽑는 방식(rejection sampling)으로 고르게 맞춥니다. 생성은 브라우저 안에서 끝나고 결과는 어디에도 기록되지 않습니다.

중복 없이 뽑기와 추첨

"중복 없이"를 켜면 범위의 모든 정수를 배열에 넣고 Fisher–Yates 셔플로 섞은 뒤 앞에서 개수만큼 자릅니다. 이 방법은 모든 조합이 같은 확률로 나오므로 순번 정하기, 당첨자 뽑기, 로또식 번호 고르기(1~45에서 6개)에 그대로 쓸 수 있습니다. 범위가 20만을 넘으면 메모리를 아끼기 위해 뽑은 값을 기억해 두고 중복이면 다시 뽑는 방식으로 바뀝니다. 추첨에 쓸 때는 참가자 명단에 번호를 붙여 두고 이 도구로 번호를 뽑은 뒤, 뽑힌 번호와 설정(범위·개수)을 함께 캡처해 두면 공정성을 설명하기 쉽습니다.

소수 난수의 정밀도

소수점 자리를 지정하면 0 이상 1 미만의 64비트 정밀도 실수를 만든 뒤 범위에 맞게 늘리고 지정 자릿수로 반올림합니다. 최소·최대 값 자체가 나올 확률은 중간 값보다 절반 정도 낮습니다(반올림 구간이 반쪽이기 때문). 통계 실험용 샘플에는 문제가 없지만 "정확히 균등한 이산 분포"가 필요하면 정수로 뽑은 뒤 나누는 것이 낫습니다.

주사위·동전의 기대값

주사위 한 개의 기대값은 3.5이고 N개를 굴리면 합계의 평균은 3.5N에 가까워집니다. 몇 번만 굴리면 분포가 들쭉날쭉한 것이 정상이고, 100개 이상 굴려야 각 눈이 약 1/6로 수렴하는 모습이 보입니다. 동전도 마찬가지로 10번 던져 7:3이 나오는 일은 흔하며(확률 약 12%), 그것이 난수가 잘못됐다는 뜻은 아닙니다.

자주 묻는 질문

같은 숫자가 연달아 나왔어요. 고장인가요?

중복 허용 상태에서는 자연스러운 일입니다. 1~10에서 5개를 뽑으면 중복이 하나 이상 나올 확률이 70%에 가깝습니다. 중복을 원하지 않으면 "중복 없이 뽑기"를 켜세요.

로또 번호로 써도 되나요?

1~45, 6개, 중복 없이, 오름차순으로 설정하면 됩니다. 물론 당첨 확률은 어떤 방법으로 골라도 같습니다.

음수 범위도 되나요?

네. 최소에 음수를 넣으면 됩니다. 최소가 최대보다 크면 자동으로 바꿔서 계산합니다.

함께 보기