【问题标题】:Random Binary Generator (not pseudo)随机二进制生成器(非伪)
【发布时间】:2011-04-17 12:18:01
【问题描述】:

我如何生成随机二进制值让我们说 10 位数字 0010101001 我想称之为 C1 然后我想创建另一个名为 C2 的随机 10 位二进制数。

C# 是我选择的语言。

c#有没有bitset类

简单点就好了,比如

int C1

for ( int C1 = 0; <=10; C1++)
     output bitset<0>

return 0;

需要存储 c1 和 c2 。

【问题讨论】:

  • 如果你想要它不是伪随机的,你需要一个非伪随机的外部数据源。祝你好运。物理学尚未证明存在。
  • 伪 RNG 有什么问题?
  • 要生成真正的随机值,您需要随机源。这意味着你必须离开你的电脑。有人用过放射性衰变(fourmilab.ch/hotbits),有人看宇宙背景辐射,有人用熔岩灯。你真的想要真正的随机性吗?
  • 为什么伪随机源不足?如果你能回答这个问题,那么你可能会得到更好的答案。
  • @Garrith:你如何定义(或检测)“真实”和“伪”随机数之间的区别>

标签: c# c++


【解决方案1】:

如果您想要真正的随机数,您需要计算机可能没有的硬件。但是,它可以简单而廉价地添加 - 例如,请参阅here

但是,我认为一个好的伪随机生成器,例如 Boost 附带的那些 - 请参阅 Boost random number generator 的示例,足以满足您的需求

【讨论】:

  • 在 Linux 上,我相信熵也可以从噪声和温度读数等中收集,并用于通过 /dev/random 生成“真正的”随机数(速度较慢)。但是,这对于虚拟机来说更困难:stackoverflow.com/questions/265591/… 这是一个旁注,因为这个人正在使用 C#。
  • @ninja 不幸的是,您可以使用 /dev/random 快速耗尽熵(我认为它应该会增加!),这是我提供链接的 USB 记忆棒等设备进来吧。
【解决方案2】:
function randomInt(max)
    // produces integer with uniform distribution between [0,max)
    # this should be in your standard library
    # though perhaps not by this name; and you may need to
    # initialize and maybe randomly seed your RNG beforehand

myRandomBinaryNumber = randomInt(2^10)  // then cast it if required

编辑:这个答案在“(非伪)”添加到标题之前添加

编辑:我推荐其他答案中列出的方法,具体取决于个人需要(伪随机、加密伪随机、真正随机等)

【讨论】:

    【解决方案3】:

    您可能对 Ivy Bridge 英特尔处理器中可用的 rdrand 指令感兴趣。它的熵源使用硅内部的热噪声(参见DRNG Software Implementation Guide)。

    英特尔提供rdrand C++ library。因此,您需要编写托管 C++ 包装程序集才能在 C# 中使用它。我刚刚使用该库编译了测试项目,但我的处理器不支持该指令。

    【讨论】:

    【解决方案4】:

    听起来您正在寻找BitArray 类或RNGCryptoServiceProvider 类。

    【讨论】:

      【解决方案5】:

      在谷歌上搜索 [C# random number] 会得到 http://social.msdn.microsoft.com/Forums/en/Vsexpressvcs/thread/55fb3116-c978-4ac8-9381-a2605e16e256 作为第三个命中。

      Random random = new Random();
      int randomNumber = random.Next(0, 2^10);
      

      话虽如此,您可能正在寻找“伪随机”来源。

      编辑:这个答案在“(非伪)”添加到标题之前添加

      【讨论】:

        猜你喜欢
        • 2015-11-26
        • 2014-05-18
        • 1970-01-01
        • 2015-08-07
        • 2012-02-12
        • 1970-01-01
        • 2011-01-10
        • 2011-11-03
        • 1970-01-01
        相关资源
        最近更新 更多