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

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

Linda Hamilton
Linda Hamilton원래의
2025-01-03 14:21:42409검색

How Can I Efficiently Generate Uniformly Distributed Random Integers in C  ?

균일하게 분포된 무작위 정수를 효율적으로 생성

프로그래밍 영역에서 난수 생성은 다양한 애플리케이션에서 중요한 역할을 합니다. 이러한 작업 중에서 균일하게 분포된 임의의 정수를 생성하는 것은 일반적인 요구 사항입니다. 기존 접근 방식의 한계를 탐구하고 속도, 균일성, 가변 범위 및 파종 가능성의 특정 요구 사항을 충족하는 최적화된 솔루션을 제시해 보겠습니다.

순진한 접근 방식의 한계

rand() 함수를 활용하는 순진한 접근 방식은 최대 경계 값을 제외하기 때문에 진정한 균일성을 제공하지 못합니다. 이를 해결하기 위해 두 번째 공식이 제안되었지만 실험 결과 불균일 분포가 나타났습니다.

최적의 솔루션: C 표준 라이브러리 활용

다행히 C 표준은 라이브러리는 편견 없는 난수를 생성하기 위한 포괄적인 솔루션을 제공합니다. 헤더. 이 헤더는 Mersenne-Twister와 같은 고급 난수 엔진과 일관되고 균일한 결과를 보장하는 분포 클래스를 제공합니다.

다음 C 코드 조각은 구현을 보여줍니다.

#include <random>

std::random_device rd;     // Random device for seed initialization
std::mt19937 rng(rd());    // Random-number engine using Mersenne-Twister
std::uniform_int_distribution<int> uni(min,max); // Distribution class for uniform integers

auto random_integer = uni(rng);

이것은 접근 방식은 다음과 같은 상당한 이점을 제공합니다.

  • 속도: C 표준 라이브러리는 다음과 같습니다. 성능을 위해 설계되어 최적화된 솔루션을 제공합니다.
  • 균일성: std::uniform_int_distribution 클래스는 지정된 범위 내에서 편견 없는 결과를 보장합니다.
  • 가변 범위: 이 솔루션은 임의의 최소값과 최대값을 지원합니다. 경계.
  • 시드 가능성: std::random_device를 사용하면 재현성을 위해 무작위 엔진을 시드할 수 있습니다.

C 표준 라이브러리를 활용하면 쉽게 다음을 수행할 수 있습니다. 균일하게 분포된 난수를 효율적이고 안정적으로 생성하여 복잡한 수식을 사용하거나 수레바퀴를 새로 만들 필요가 없습니다.

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

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