0~100까지 난수발생 함수가있다
0~70까지 뽑는방법은?
1. 모듈로연산 : 0~30확률이 더높음
2. 70~100 if문으로 제거
3. 10으로 모듈로연산 한x 7로모듈로연산y x+10y 거의난수
0~120뽑는방법은?
위와비슷
제머리의한계입니더 뭐가있을까용
0~70까지 뽑는방법은?
1. 모듈로연산 : 0~30확률이 더높음
2. 70~100 if문으로 제거
3. 10으로 모듈로연산 한x 7로모듈로연산y x+10y 거의난수
0~120뽑는방법은?
위와비슷
제머리의한계입니더 뭐가있을까용
발생함수 7번 호출해서 더하고 10으로 나누기ㅋ
근데 그러면 70이 너무 안나오네, 0~99랑 0~69하면 안대여?
더하는건 0 0 0 0모두 0이나와야 0이나와용 그만큼 안좋은 난수에용
애초에 c의 경우엔 rand()함수가 0~65535 의 수를 랜덤으로 뽑는다고 알고있는데 그래서 사용법이 rand()%(원하는 범위) 이기도 하고...
더하는것보단 난수*7 / 10 이 더 나아보이는뎀. 확률도 큰 문제 없을꺼고
원하는범위가 10000이라고하면 0~5535가많이나와요 여기서 시작된 문제를 생각해봤어욯 물론 다른 암호학 관련된 함수가있겠지만 그냥 사고력문제로 풀면 어느방법이있을지 궁금해서
난수 나누기7 *10은 결국 특정 숫자가 두번나와요 그냥 모듈로한게 0~30이중복되는거면 그저 이중복되는 숫자가 달라질뿐
심심해서 0~999까지의 수를 1000000(백만)번 생성하여 0~534까지의 표준편차와 535~1000까지의 표준편차를 구한걸 1000번 반복해서 평균값을 구한 뒤 두 값을 빼봤는데
10번 그값을 더해보면 별 차이가 안나는데 생각해보니 표편 구하면 안되는거냄...... ㅠㅠ
논리로는 많이 나오는게 맞지만 유의미 한 값인지가 궁금해서 해봤는데 평균으로 바꿔서 8번 해보니 246번 차이나네요. 표편은 1626
rand()p 한 뒤에 이전값이 70을 넘으면 그 넘은 값 만큼 다음 수에 더해주는 식으로 만들면 공평한 확률이 되려나요? 물론 메모리도먹고 프로그램으로썬 값어치가 없겠지만
크누스아저씨책에나왔던거같은데정확히기억이안나는데증명도있었던거같으기도하고그러네 - dc App
2번이 제일 확실한 방법가튼데.. 범위 밖이면 다시 굴리는 식으로다가
근데 101중에 30이 범위밖인건 너무 확률이 크니까 0~100 난수를 x, y 두개 만들어서 101x + y 를 구하는 0~10200 난수생성기를 만들겠음. 이 경우엔 0~10152인 경우엔 mod 71해서 리턴하고 그 밖의 경우에 다시 반복하는식으로 하면 되지 않을까..
운이 정말정말 나쁘면 난수생성을 엄청 많이 할수도 있지만 그런 경우는 정말 적을거고, 통계적으로도 O(1)번만 난수생성하면 됨. 0~120도 마찬가지 방법으로.
감사합니다 ㅎ 위의방법이 제일좋을것 같네요 굳이70이란난수말고 엄청큰난수 생성한 발상을 해서 모듈로한다는 생각이 멋지군요