>백엔드 개발 >C++ >C에서 균일하게 분포된 무작위 정수를 어떻게 생성할 수 있습니까?

C에서 균일하게 분포된 무작위 정수를 어떻게 생성할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-24 20:17:11855검색

How Can I Generate Uniformly Distributed Random Integers in C  ?

균일하게 분포된 임의의 정수 생성

소프트웨어를 개발할 때 지정된 범위 내에서 임의의 정수를 생성하는 것은 일반적인 작업입니다. 그러나 빠르고 균일하게 분포된 난수 생성기를 찾는 것은 어려울 수 있습니다. 이 기사에서는 주어진 범위 내에서 임의의 정수를 생성하는 다양한 접근 방식을 탐색하여 이 문제를 해결합니다.

간단한 접근 방식

무작위 정수를 생성하는 일반적인 방법은 rand()를 사용하는 것입니다. 기능. 그러나 원래 질문에 표현된 것처럼 rand()는 특히 작은 범위의 경우 편향된 분포로 이어질 수 있습니다.

이 문제를 해결하기 위해 대체 공식이 제안되었습니다.

( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX

이 공식은 보다 균일한 분포를 제공하지만 여전히 모든 요구 사항, 즉 속도, 균일 분포, 변수 범위 및

구조를 위한 C 표준 라이브러리

C 표준 라이브러리 함수 std::uniform_int_distribution 및 관련 난수 생성기 std::mt19937을 소개합니다. 이 접근 방식은 간단하고 빠르며 편견 없는 결과를 제공합니다.

#include <random>

std::random_device rd;
std::mt19937 rng(rd());
std::uniform_int_distribution<int> uni(min,max);

auto random_integer = uni(rng);

std::random_device는 생성기를 실제 엔트로피 소스로 초기화하여 생성된 숫자가 예측 불가능하고 무작위인지 확인합니다. std::uniform_int_distribution은 생성될 정수 범위를 정의하여 해당 범위 내의 모든 값이 선택될 확률이 동일하도록 보장합니다.

이 접근 방식은 모든 요구 사항을 충족합니다.

  • 속도: 표준 라이브러리 구현은 대량의 난수를 생성하는 경우에도 매우 효율적입니다.
  • 균일 분포: std::uniform_int_distribution 함수는 생성된 숫자의 편향되지 않고 균일한 분포를 보장합니다.
  • 변수 범위: 분포는 최소 및 최대 매개변수를 설정하여 정수 범위에 맞게 사용자 정의할 수 있습니다.
  • 시드 가능성: rd 매개변수는 생성기에 특정 값을 부여하는 수단을 제공합니다.

우수한 솔루션

결론적으로, C에서 균일하게 분포된 난수 정수를 생성하는 가장 간단하고 최선의 접근 방식은 std::uniform_int_distribution 및 std::mt19937 함수를 사용하는 것입니다. . 이 접근 방식은 표준 라이브러리의 최적화된 알고리즘을 활용하여 속도와 무작위성을 모두 보장합니다.

위 내용은 C에서 균일하게 분포된 무작위 정수를 어떻게 생성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.