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

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

Barbara Streisand
풀어 주다: 2024-12-20 15:43:17
원래의
186명이 탐색했습니다.

How Can We Generate Truly Uniformly Distributed Random Integers in a Specified Range?

균등하게 분포된 무작위 정수 생성

많은 프로그래밍 애플리케이션에서 지정된 범위 내에서 무작위 정수를 생성하는 것은 일반적인 요구 사항입니다. 그러나 이러한 정수가 균일하게 분포되도록 하는 것은 어려운 일입니다. 이 기사에서는 균일한 분포를 달성하기 위한 다양한 접근 방식을 살펴봅니다.

기존 코드 및 제한 사항

사용자가 제공한 코드는 rand() 함수를 활용하여 주어진 범위. 그러나 이 접근 방식은 특히 <0, 1>과 같은 작은 범위의 경우 균일성이 부족하다는 문제가 있습니다. 이는 rand()가 최대값인 RAND_MAX를 반환할 확률이 낮기 때문입니다.

제안 공식

이 문제를 해결하기 위해 사용자는 새로운 공식을 고안했습니다.

( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
로그인 후 복사

이 공식은 균일성을 향상시키는 것을 목표로 하지만 샘플링에서 알 수 있듯이 여전히 부족합니다. data.

C 표준 라이브러리 솔루션

C 표준 라이브러리는 이 문제에 대한 우아하고 안정적인 솔루션을 제공합니다. std::random 헤더에는 균일 분포로 난수를 생성할 수 있는 난수 생성기 및 분포 세트가 포함되어 있습니다.

#include <random>

// Initialize random-number engine with a seed
std::random_device rd;
std::mt19937 rng(rd());

// Define uniform integer distribution
std::uniform_int_distribution<int> uni(min, max);

// Generate random integer within range
auto random_integer = uni(rng);
로그인 후 복사

이 접근 방식은 잘 테스트되고 최적화된 코드를 활용하여 균일한 분포와 효율성을 보장합니다. 이를 통해 바퀴를 재발명할 필요가 없으며 편견이나 초기 가치에 대한 우려가 사라집니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿