c언어 난수 예제

  • 0

c언어 난수 예제

C에서 난수를 생성하는 가장 좋은 방법은 OpenSSL과 같은 타사 라이브러리를 사용하는 것입니다. 예를 들어 arc4random_buf는 매개 변수 buf : void *에 임의의 콘텐츠를 넣습니다. 콘텐츠의 양은 바이트 : size_t 매개 변수에 의해 결정됩니다. 따라서 항상 변경되는 값으로 랜덤 라이저를 시드해야합니다. time() 함수와 함께 현재 시간의 값을 공급하여 이 작업을 수행합니다. stdlib.h로 선언된 rand 함수는 호출할 때마다 범위 0에서 RAND_MAX(포함)에 임의 정수를 반환합니다. GNU C 라이브러리 RAND_MAX를 사용하는 컴퓨터에서는 INT_MAX 또는 231-1과 같지만 32767만큼 작을 수 있습니다. 랜드반환난수의 품질에 대한 보장은 특별히 강하지 않지만, 캐주얼한 사용에도 충분해야 하며, C 표준의 일환으로 거의 모든 곳에 존재한다고 가정할 수 있다는 장점이 있습니다. 일반적으로 거부 샘플링을 사용하여 특정 속성이 있는 임의 값을 얻을 수 있으며, 여기서 해당 속성으로 직접 값을 생성하기가 어렵습니다. 무작위 소수를 생성하는 프로그램은 다음과 같습니다: 무작위 접근 방식의 단점은 일치하는 항목이 없는 경우 종료시기를 알기 어렵다는 것입니다.

우리가 몇 가지 고정 된 수의 시험 후에 중지하면 작은 확률로 잘못된 답을 줄 수있는 몬테 카를로 알고리즘을 얻습니다. 일반적인 해결책은 작은 실패 확률을 허용하거나 항상 작동하는 결정적인 백업 알고리즘을 인터리브하는 것입니다. 후자의 접근 방식은 실행 시간이 가변적이지만 정확성이 없는 라스베이거스 알고리즘을 제공합니다. /dev/random 및 /dev/urandom 모두 키 입력 사이의 시간 또는 하드 디스크 회전 속도의 작은 변형과 같이 컴퓨터의 물리적으로 임의의 속성에서 임의비트를 파생시됩니다. 둘 사이의 차이점은 /dev/urandom 항상 당신에 게 몇 가지 무작위 보이는 비트를 줄 것 이다, 그것은 암호화 의사 난수 생성기를 사용 하 여 여분의 것 들을 생성 하는 경우에, 동안 /dev/random 그것은 사실 확신 하는 비트만 줄 것 이다 임의의. 컴퓨터가 초당 정품 임의 비트의 소수만 생성하기 때문에 너무 자주 읽으면 /dev/random이 풀을 소모한다는 의미일 수 있습니다. 이 경우 풀이 다시 채워질 때까지 /dev/random에 대한 읽기가 차단됩니다(입력이 없는 터미널을 읽는 것과 같습니다). 나는 최근 응용 프로그램에서 의사 난수 생성기와 심각한 문제가 있었다 : 나는 반복적으로 pyhton 스크립트를 통해 내 C 프로그램을 호출하고 나는 시드 코드로 사용하고 있었다 : C의 주어진 범위에서 난수를 생성하는 방법. 우리의 프로그램에서 우리는 범위 [0, 100]에서 의사 난수를 인쇄합니다. 따라서 [0, 99]에서 숫자를 반환하는 rand() % 100을 계산하므로 원하는 범위를 얻으려면 1을 추가합니다.

난 당신이 당신의 난수가 될 필요가 얼마나 균일 모르겠어요, 하지만 위의 대부분의 요구에 충분히 균일 나타납니다. 예를 들어, 비디오 크랩 머신에 대 한 다이 롤을 시뮬레이션 하려는 가정, 하지만 당신은 조니에 의해 구타 하 고 싶지 않아 “디버거” 네바다 주 게임 위원회 통지 때 6-6 그것은 예정 보다 약간 덜 자주 오고 있다. 시도하는 자연적인 것은 랜드 모드 6의 출력을하는 것입니다 : 이것은 당신의 선택의 두 숫자 사이의 난수를 얻을 수있는 좋은 방법입니다. OpenSSL의 RAND_bytes() 자체, 아마도 리눅스에서 /dev/urandom을 읽음으로써. 많은 난수가 필요한 경우 커널에서 복사해야하기 때문에 /dev / urandom에서 모두 읽는 것이 너무 느릴 것입니다. OpenSSL이 시드에서 더 많은 난수를 생성할 수 있도록 하는 것이 더 빠릅니다. 이 프로그램을 다시 실행하면 동일한 숫자 집합을 얻게 됩니다. 사용할 때마다 다른 숫자를 얻으려면 srand (서명되지 않은 int seed) 함수; 여기서 시드는 서명되지 않은 정수입니다.


Recent Post

큐 스택 예제

마크업 예제

리눅스 qt 예제

Categories

  • No categories
Website is Protected by WordPress Protection from eDarpan.com.