2014-09-23 3 views
-5
#include <memory> 
#include <functional> 

#include <zmq.hpp> 
#include <zhelpers.hpp> 

void main(){ 
    char identity[10] = {}; 
    sprintf(identity, "%04X-%04X", within(0x10000), within(0x10000)); 
    printf("%s\n", identity); 
} 

은 여기에서 참조를 촬영 한 : https://github.com/imatix/zguide/blob/master/examples/C%2B%2B/asyncsrv.cpp왜이 함수는 난수를 생성하지 않습니까?

+1

'within()'은 무엇입니까? 그리고 관찰 된 행동, 기대되는 행동을 기술하십시오. – DevSolar

+0

@DevSolar 아마도 그 함수. 나는 리뷰어를위한 참고서를주었습니다. 링크 – monsterrrrr

+1

에 "아마도"그것이 당신의 대답입니다. 웹에서 코드 스 니펫을 복사하여 붙여 넣을 수는 없습니다. 특히 동일한 헤더를 포함하지 않고 동일한 라이브러리를 링크하는 경우가 아니라면 작동하도록하십시오. 그리고 나서조차 코드를 처음 이해해야합니다 ... – DevSolar

답변

1

나는 within()가 무엇 모르겠지만, 당신은 C++11에 도입 된 난수를 생성하는 새로운 방법을 사용할 수 있습니다. 링크에는 좋은 예가 있습니다.

#include <iostream> 
#include <random> 
int main { 
    // Seed with a real random value, if available 
    std::random_device rd; 

    // Choose a random number between 1 and 6 
    std::default_random_engine engine(rd()); 
    std::uniform_int_distribution<int> uniform_dist(1, 6); 
    int randomNumber = uniform_dist(engine); 
    int anotherRandomNumber = uniform_dist(engine); 
    std::cout << "Randomly-chosen number: " << randomNumber << '\n'; 
    std::cout << "Another Randomly-chosen number: " << anotherRandomNumber << '\n'; 
} 
1

나는 그런 빈약 한 질문에 대답을 주저하지만 ...

within()의 정의로 촬영 :

경우 링크가 미래의 어느 시간에 무효가됩니다, 여기에 관련 코드입니다 가 발생 않습니다

#include <stdlib.h> 
#include <stdio.h> 

#define within(num) (int) ((float) (num) * rand()/(RAND_MAX + 1.0)) 

void main(){ 
    char identity[10] = {}; 
    sprintf(identity, "%04X-%04X", within(0x10000), within(0x10000)); 
    printf("%s\n", identity); 
} 

이 코드 : 마이크 시모어에 의해 발견, 코드는 동일합니다 (의사) 난수. 당신이 혼동스럽게 생각하는 것은 프로그램을 실행할 때마다 같은 (의사) 난수를 생성한다는 것입니다. 그러나 의사 랜덤 넘버 생성자는 입니다. : 동일한 시드 (srand()을 통해 생성기를 시드하지 않았으므로)는 동일한 시퀀스의 숫자를 생성합니다. (따라서 "의사"입니다.)

man rand과 같이 추가 읽기를 강력히 권장합니다.

관련 문제