
我看到很多关于rand()%N的讨论,但没有一个网页可以解释这一切.
例如,我很好奇这个问题是否只针对C和Linux,或者它是否也适用于windows,C,. Java,.Net,Python,Perl.
请帮助我深究这一点.此外,数字是如何非随机的?谢谢!
解决方法 我没有一个网页可以推荐你,但我可能有一个“信封背面”的解释,这将有所帮助.简单随机数生成器的工作方式是遵循这些步骤>使用生成的最后一个数字n或种子编号.
>将该数字乘以一个特殊的大数字
>添加另一个特殊的大号
>除以第三个特殊的大数,然后扔掉剩余的数字
>返回结果
现在,如果您考虑除了步骤4以外的所有事情,您正在进行 *** 作,其中只有较低位可以改变结果的低位.添加1001和100 … 00001将以… 02结束(哈,你虽然我说的是基地2,但实际上这些数字是基础12的咯咯笑声.)无论计算的高端是什么.同样,当你乘以它时,它将以1结尾,无论如何.
在高端也存在类似的问题,10亿次十亿次总是占据数百个枯萎数的贡献.这表明中间是好事发生的地方.这里有很多位相互作用 – 高,中,低.
这就是除法步骤的目的,它切断了结果的底部块,而没有那么多的交互.顶部块通常不会被切断,因为当乘法不再适合机器字时,计算机会丢弃高位.
最后虽然截止点有些随意,你可能比设计算法的人更挑剔,但仍然会砍掉几个比特.
对于你有多糟糕的问题,他们可能非常糟糕.最简单的方法是将单个数字分组为元组并绘制图形.因此,如果您有随机数a,b,c,d,…图(a,b),(c,d),……并查看结果.这被称为光谱测试,兰德失败了.这个我有一个尝试http://random.mat.sbg.ac.at/results/karl/spectraltest/的链接
总结以上是内存溢出为你收集整理的寻找一个清晰简洁的网页,解释为什么较低位的随机数通常不是随机的全部内容,希望文章能够帮你解决寻找一个清晰简洁的网页,解释为什么较低位的随机数通常不是随机的所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)