【问题标题】:Generating Random Number in Range [duplicate]在范围内生成随机数[重复]
【发布时间】:2020-07-01 17:27:46
【问题描述】:

我知道如何在 C++ 中生成随机数。喜欢,

int num = rand()%(1000)+1;

那么随机数将在 1 到 1000 之间。 但我的问题是-

  1. 如何生成两个固定范围之间的数字,上 sn-p 是否可以生成 1 到 X 之间的数字。但是对于两个不同的范围(X 到 Y)我应该怎么做。就像我想生成之间的随机数1000 到 5000。
  1. 如何生成超过 32 位和最多 64 位的数字?我试过这样-

long long num = rand()%(1000000000000000000)+1;

【问题讨论】:

  • 每个问题回答一个问题

标签: c++ c++14


【解决方案1】:

给定整数值 X、Y 和您想要介于...之间的随机值

int range = abs(Y-X) + 1;
int randNum = rand() % (range) + X;

至于更长的数字...只需将 2 个随机值相加即可。因此,如果您想要一个最大大小为 64 位的结果,那么

int randNum1 = rand();
int randNum2 = rand();
long long range = abs(Y-X) + 1;
long long finalNum = (randNum1 + randNum2) % (range) + X;

【讨论】:

  • 两个均匀分布的随机数相加不会得到均匀分布的输出。
  • 太真实了..但使用 rand() 只是伪随机开始......对于大多数目的来说它通常是可以接受的。如果你需要真正的随机性,那么你还需要 rand()
  • rand() 的问题不在于它是伪随机的,而在于它是质量差的伪随机。同样对于制服+制服!=制服,伪或不相关
  • 如果您正在对某事物进行统计建模,并且需要运行多个迭代并相互比较,那么是的,uniform+uniform 可能会导致问题。但是对于您只想选择一个选项的任何单个给定事件,例如(从非常大的图片池中显示随机图片),目的更多只是您不明确计算下一个选择。为此,我所拥有的应该工作
  • @DynasticSponge 不会添加太多 rand() 值,如果值太大会导致溢出???
猜你喜欢
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 2012-09-30
  • 2011-03-01
相关资源
最近更新 更多