如何在Javascript中的两个指定变量之间生成随机整数,例如x = 4并y = 8输出4,5,6,7,8中的任何一个?
我需要一个能在给定范围内生成随机整数的函数(包括边界值).我没有不合理的质量/随机性要求,我有四个要求:
我目前有以下C++代码:
output = min + (rand() * (int)(max - min) / RAND_MAX)
Run Code Online (Sandbox Code Playgroud)
问题是,它并不是真正统一的 - 只有当rand()= RAND_MAX时才返回max(对于Visual C++,它是1/32727).这是小范围的主要问题,如<-1,1>,其中最后一个值几乎从不返回.
所以我抓住笔和纸,并提出了以下公式(它建立在(int)(n + 0.5)整数舍入技巧):

但它仍然没有给我统一的分配.对于值-1,0,0,重复运行10000个样本给出37:50:13的比率.
你能建议更好的配方吗?(甚至整个伪随机数发生器功能)
我想使用/dev/random或/dev/urandom在C.我怎么能这样做?我不知道如何在C中处理它们,如果有人知道请告诉我如何.谢谢.
以下代码每秒输出一个随机数:
int main ()
{
srand(time(NULL)); // Seeds number generator with execution time.
while (true)
{
int rawRand = rand();
std::cout << rawRand << std::endl;
sleep(1);
}
}
Run Code Online (Sandbox Code Playgroud)
我如何调整这些数字的大小,使它们总是在0-100的范围内?
有人问我产生之间的随机数a和b,包容,使用random(0,1).random(0,1)生成0到1之间的均匀随机数.
我回答了
(a+(((1+random(0,1))*b))%(b-a))
Run Code Online (Sandbox Code Playgroud)
我的采访者对我b在这段表达中的用法不满意:
(((1+random(0,1))*b))
Run Code Online (Sandbox Code Playgroud)
然后我尝试将我的答案改为:
int*z=(int*)malloc(sizeof(int));
(a+(((1+random(0,1))*(*z)))%(b-a));
Run Code Online (Sandbox Code Playgroud)
后来这个问题改变产生random(1,7)的random(1,5).我回答:
A = rand(1,5)%3
B = (rand(1,5)+1)%3
C = (rand(1,5)+2)%3
rand(1,7) = rand(1,5)+ (A+B+C)%3
Run Code Online (Sandbox Code Playgroud)
我的答案是否正确?