다양한 PRNG의 견고성을 테스트하는 몇 가지 코드가 있으며 옵션을 사용하여 테스트중인 PRNG를 선택하고 싶습니다. typedef double (*voidPRNG_ptr)(void);
함수 getopt에서 작동하지 않는 포인터
내가 테스트 기능을 가지고 :
나는 함수 포인터 유형이 test_results
는 형식 정의 구조체이다 test_results* investigator_alloc(int N, voidPRNG_ptr RNGp)
.
나는 PRNG 기능이 있습니다 ... double box_muller(void)
, double rejection(void)
, double RNG(void)
등 주요 작품 FINE에
다음 코드 : box_muller 기능은 RNG로 사용되며, 데이터는
int main(int argc, char** argv){
int N = atoi(argv[1]);
voidPRNG_ptr PRNGp = &box_muller;
test_results* results = investigator_alloc(N, PRNGp);
return 0;
}
예상대로
이 또한 잘 작동 예상대로
int main(int argc, char** argv){
int N = atoi(argv[1]);
voidPRNG_ptr PRNGp = &box_muller;
PRNGp = &rejection;
test_results* results = investigator_alloc(N, PRNGp);
return 0;
}
거부에있어서, 상기 RNG로서 사용된다.
그러나이 작동하지 않습니다 :
int main(int argc, char **argv){
int opt;
int atest = 0;
voidPRNG_ptr PRNGp = &RNG; //set default
while((opt = getopt(argc, argv, "abur")) != -1){
if(opt == 'a') {
PRNGp = &normal_approx;
atest = 1;
}
else if(opt == 'b') PRNGp = &box_muller;
else if(opt == 'u') PRNGp = &RNG;
else if(opt == 'r') PRNGp = &rejection;
}
printf("\n %d\n",atest);
int N = atoi(argv[1]);
//PRNGp = &rejection;
//PRNGp = &normal_approx;
//PRNGp = &box_muller;
test_results *results = investigator_alloc(N,PRNGp);
return 0;
}
나는 atest
가 선택한 옵션에 따라 적절한 값으로 설정되어 getopt
작동하는지 알고있다. 그러나 데이터가 비어 있기 때문에 함수 포인터에 잘못된 것이 있어야합니다.
아이디어가 있으십니까? 감사합니다.
이 프로그램을'-a -b'라고 부르면 처음에는'a'를 얻고,'atest = 1'을 설정하면'b'가되어'box_muller'가' PRNGp '이지만'atest'는'1'로 설정됩니다. 그게 네가 필요한거야? – glglgl
그리고 당신의 질문에 답을해도 : 당신의 묘사가 "효과가 없다"는 것은 솔직히 조금 비천합니다. – glglgl
'atest'는 플래그가 설정되고있는 날씨를 확인하기 위해 방금 만났습니다. 실제로 어떤 작동 코드의 일부가 될 의도는 아니 었습니다. 충분히 공정하게, 어떻게 작동하지 않았는지 상세히 설명해야합니다. – Rohan