2013-03-02 1 views
3

나는 UNIX에서 Windows 이상 포트에 몇 가지 코드를 시도하고, 나는 주어진 씨 x를 들어, POSIX.1-을 따르는 것과 같은 수의 시퀀스를 생성, POSIX srandom(x)random() 기능의 구현이 필요합니다 2001. Windows에서 사용할 수있는 옵션은 무엇입니까?POSIX srandom (...) 및 random() 함수와 동일한 Windows?

답변

5

srandom와 가족의 glibc의 구성원입니다. 라이선스가 호환되는 한 srandom/random에 대한 the source code from glibc을 응용 프로그램에 복사 할 수 있습니다. 다른 구현체를 찾고 있다면, 작은 amou

사실, POSIX는 인터페이스 적합성이며 구현 적합성이 아닙니다. 실제로 메커니즘을 생성하기위한 것이거나 결과 숫자가 무엇인지 명시하지 않습니다 해야한다.

여러 플랫폼에서 동일한 번호 시퀀스를 보장하려면 임의의 난수 생성기의 표준 라이브러리 구현에 의존하지 말고 직접 만들거나 알려진 구현을 재활용해야합니다.

JWWalker에 의해 코멘트에서 언급 한 바와 같이

은 임의의 숫자 C++ 클래스의 좋은 세트를 제공 꽤 좋은 boost random implementation를,있다,하지만 C++하지 C이다 - 다른 언어, 그래서 아마 직접적으로 적합하지 않습니다.

+0

오픈 소스 난수 생성기에 대해서는 [무작위 라이브러리 부스트] (http://www.boost.org/doc/libs/1_61_0/doc/html/boost_random/reference.html)를 참조하십시오. – JWWalker

+0

링크가 작동하지 않습니다. 내가 컴파일해야 할 파일이 있는데 srandom을 대체하기 위해 어떻게해야합니까? –

+0

@ TomášZato 나는 glibc random.c에 대한 소스웨어 링크를 가리 키도록 링크를 업데이트했습니다. 이것은 미래를 위해 살아 있어야합니다. 그것은 glibc 코드이며 사용하기에 적합하지 않을 수있는 라이센스가 있습니다. – Petesh

1

Windows에서 rand_ssrand 기능을 확인할 수 있습니다. 그러나 POSIX 표준을 준수하는지 확신 할 수 없습니다.

편집

더 나은 하나 CryptGenRandom 것 같다. 자세한 내용은 link을 확인하십시오. 당신은 몇 가지 간단한 의사 난수 생성기를 찾고 있다면

+0

'rand_s'는'srand'에 의해 설정된 시드를 사용하지 않고'rand'는'random'에 의해 반환 된 31 비트 난수와 달리 15 비트 난수를 반환합니다. – JWWalker

0

당신은 선형 합동 생성기 http://en.wikipedia.org/wiki/Linear_congruential_generator

등을 사용할 수 있습니다. 첫 번째 예 :

unsigned int seed = 2; 

unsigned int rand() 
{ 
    seed = 1664525 * seed + 1013904223; 
    return x; 
} 

void srand(unsigned int new_seed) 
{ 
    seed = new_seed; 
} 
+1

주의 사항 ** 정의되지 않은 동작 **! – pmg

+0

당신은 맞습니다 ... -> edit –

+2

이것은 컴파일되지 않습니다. 'x' 변수는 무엇입니까? – swdev