사용으로 인한 왜곡을 도입하지 않고 주어진 범위에서 의사 난수 정수를 생성하고 싶습니다 rand()%N
.
나는 기능에 대해 읽고 random()
그리고 randomize()
그것은 대체하는 것 rand()
하고 srand()
직접의 매개 변수로 주어진 범위의 정수를 리턴하는 함수하지만 random()
기능. 두 경우 모두 함수가 stdlib.h
라이브러리 에있는 것처럼 보입니다 .
내가 가진 문제는 어떻게 든 이러한 기능을 작동시킬 수 없다는 것입니다. 다음은 함수를 테스트하기 위해 만든 작은 테스트 코드입니다.
#include <stdio.h>
#include <stdlib.h>
int main(){
randomize();
printf("%d\n",random(100));
return 0;
}
컴파일시 gcc -o test test.c
오류가 발생합니다.
test.c: In function ‘main’:
test.c:6: error: too many arguments to function ‘random’
내가 아는 한 함수 random()
는 주어진 숫자의 범위를 결정하는 정수인 하나의 인수 만 취합니다. 내가 무엇을 잘못하고 있지?
편집 : 일부 TurboC 오래된 것들에 해당하는 것 같습니다. 이제 질문은 어떻게 왜곡되지 않는다는 의미에서 "진정한"임의의 정수를 만드는 것입니다. 내 접근 방식은 (Vatine이 제안한대로)
#include <stdio.h>
#include <stdlib.h>
int main(){
srand(time(NULL));
printf("%d\n",rand()/(RAND_MAX/100));
return 0;
}
올바른 결과를 산출하는 것 같습니다. 이것이 약간의 편향을 추가하는 것입니까, 아니면 결과가 범위의 숫자에 속할 확률이 적어도 같습니까?
man random
나에게 준다 :
#include <stdlib.h>
long int random(void);
따라서 오류 메시지는 정확합니다. '무작위'기능에 너무 많은 인수가 있습니다.
나는 기능 모른다 randomize
그리고 random
내가 어떤 주장을지지 않습니다 알고있다 기능을.
그러나 나는 이것을 인터넷에서 찾았습니다 (주의하십시오.이 코드를 사용해서는 안됩니다.
#ifndef __TURBOC__
#define randomize() srand48(getpid())
#define random(x) (lrand48() % x)
#endif
그렇다면 터보 C 오래된 것일까 요? 나는 또한 그것이 Turbo C 특정 기능임을 확인하는 경향 이있는이 예제 를 발견 했습니다 .
rand
및 을 계속 사용 srand
하려면 다음을 수행 할 수 있습니다.
int random(int N) {
return (double)rand()/RAND_MAX * N;
}
그러나 Mersenne Twister와 같은 다른 임의 생성기를 찾을 수도 있습니다. 사용 가능한 많은 구현이 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다