如何在给定区间内生成等概率的随机数

use*_*111 2 random algorithm

我尝试了很多但无法解决此问题

函数[1,6]以相等的概率返回范围内的数字。您可以使用库的rand()函数,并且可以假设rand()在范围内[0,RAND_MAX]以相等的概率实现范围内的返回数。

Jim*_*hel 6

我们将分多个步骤执行此操作。

您需要在 range 中生成一个数字[1, 6],包括。

您有一个随机数生成器,它将生成范围内的数字[0..RAND_MAX]

假设您想生成范围内的数字[0..5]。你可以这样做:

int r = rand();  // gives you a number from 0 to RAND_MAX
double d = r / RAND_MAX;  // gives you a number from 0 to 1
double val = d * 5; // gives you a number from 0 to 5
int result = round(d);  // rounds to an integer
Run Code Online (Sandbox Code Playgroud)

您可以使用该技术 给定范围[0, high],您可以生成一个随机数,除以RAND_MAX,乘以high,然后舍入结果。

您的范围是[1, 6],因此您必须添加另一个步骤。你想在范围内生成一个随机数[0, 5],然后加1。或者,一般来说,要在给定范围内生成一个随机数[low, high],你可以这样写:

int r = rand();
double d = r / RAND_MAX;
int range = high - low + 1;
double val = d * range;
result = round(val);
Run Code Online (Sandbox Code Playgroud)

显然,您可以组合其中一些操作。我只是单独展示了它们来说明。