【问题标题】:How to Generate Random Binary Numbers in C++?如何在 C++ 中生成随机二进制数?
【发布时间】:2016-12-04 14:34:39
【问题描述】:

我正在尝试使用以下方法实现生成随机二进制数的功能:

srand(time(NULL)); 
int S = rand() % 2;//continuous random variable between 0 and 1

然后:

 rand()%2; 

被连续调用 2^20 次... 但是我没有得到正确的随机数..有什么改进建议吗?

是否有二进制数或 eqv. 的数据类型? (而不是声明一个整数)

另外,我见过的 srand 种子的唯一实现是 time(NULL) OR time(0) ,有没有办法操纵种子以获得更好的随机数?

【问题讨论】:

  • 您可能想在您的问题中添加标签“c++”或“c”,因为我认为这就是您的代码所在。
  • 你认为什么是“适当的随机数”?你得到了什么样的结果?
  • 使用rand()%2; 只挑选您刚刚生成的随机数的低位。一些 PRNG 会在其低位生成模式,这可能是导致您的问题的原因。最好使用if (rand() % 10000 >= 5000) ... 之类的东西来避免这个问题,它会使用更多位的 PRNG 输出。
  • 你每次都打srand()吗?如果是这样,那是一个很大的禁忌。
  • 您问“......有没有办法操纵种子以获得更好的随机数?”所有纯算法 PRNG 循环,即它们最终返回到它们之前所处的状态,并且从那时起产生相同的值序列。种子值所做的只是选择循环的入口点。所以不,操纵种子会给你一个不同的循环子序列,但与随机数的质量无关。

标签: c++ random binary numbers


【解决方案1】:

二进制数只是不同基数的数字。如果您只是生成整数(以 10 为底),然后在输出时将它们转换为二进制,则没有问题。

查看此问题以获取有关将整数转换为“二进制”字符串的更多信息: C++ - Decimal to binary converting

【讨论】:

  • 这是不正确的,因为依赖于正在使用的 PRNG。许多 PRNG 在整数级别上表现得足够好,但在单个位上的性能却很差。尤其是rand() 的许多实现(我最后听说没有确定的实现)在低位性能不佳。
  • 不知道,以为数字总是一样的。看看你现在的意思吧!
猜你喜欢
  • 1970-01-01
  • 2017-02-25
  • 2015-11-26
  • 2020-04-19
  • 1970-01-01
  • 2021-12-03
  • 2018-10-13
  • 2010-11-06
相关资源
最近更新 更多