草庐IT

math - 为什么在 util Random 类中使用 48 位种子?

为什么这个类在其线性同余公式中使用48位种子?我本来期望32或64...我知道当要求32位值时它需要更高阶位。但为什么只有16个附加位?这是一个“随机”选择吗? 最佳答案 您需要比输出位更多的状态位,因为LCG的性质是状态的低位位根本不是很随机。所以如果你想要32位输出,你需要超过32位的状态。为什么使用48而不是64?因为48就足够了,而且您是几十年前设计的,所以有充分的理由希望避免使用比绝对必要更多的资源。 关于math-为什么在utilRandom类中使用48位种子?,我们在Sta

c++ - 保证值序列所有可能排列的伪随机分布 - C++

随机问题。我正在尝试创建一个程序来生成伪随机分布。我正试图找到适合我需要的伪随机算法。这些是我的担忧:1)我需要一个输入来在每次使用时生成相同的输出。2)它需要足够随机,以至于查看输入1的输出的人看不到输入1的输出与输入2的输出之间没有任何联系(等等),但不需要密码安全或真正随机。3)它的输出应该是一个介于0和(29^3200)-1之间的数字,该范围内的每个可能的整数都是一个可能的且同样(或接近)可能的输出。4)我希望能够保证410个输出序列的每个可能排列也是连续输入的潜在输出。换句话说,0到(29^3200)-1之间的410个整数的所有可能分组应该是顺序输入的潜在输出。5)我希望该函

【Python】蒙特卡洛模拟 | PRNG 伪随机数发生器 | LCG 线性同余算法 | 马特赛特旋转算法 | Python Random 模块

?写在前面:本篇博客将介绍经典的伪随机数生成算法,我们将 重点讲解LCG(线性同余发生器)算法与马特赛特旋转算法,在此基础上顺带介绍 Python的random模块。 本篇博客还带有练习,无聊到喷水的练习,咳咳……学完前面的内容你就会了解到Python的Random模块的随机数生成的实现,是基于马特赛特旋转算法的,比如random_uniform函数。而本篇博客提供的练习会让你实现一个基于LCG 算法的random_uniform,个人认为还是比较有意思的。练习题的环境为GoogleColaboratory(K80GPU)JupyterNotebook:https://colab.resear

lua - 如何在 Redis 中实现多用户安全的线性同余生成器?

我使用线性同余生成器(http://en.wikipedia.org/wiki/Linear_congruential_generator)生成向用户公开的ID。nextID=(a*LastID+c)%m现在我想在Redis中实现LCG。这是问题所在:获取当前ID并在Redis之外生成下一个ID不是多用户安全的。Redis有2个可用于简单计数器的命令:INCRBY和INCRBYFLOAT,但不幸的是Redis本身不支持模运算。目前我看到的唯一方法是使用EVAL命令并编写一些lua脚本。更新1:一些lua模拟INCRBYLCG_Value((LCG_Value*a+c)%m)-LCG_V

lua - 如何在 Redis 中实现多用户安全的线性同余生成器?

我使用线性同余生成器(http://en.wikipedia.org/wiki/Linear_congruential_generator)生成向用户公开的ID。nextID=(a*LastID+c)%m现在我想在Redis中实现LCG。这是问题所在:获取当前ID并在Redis之外生成下一个ID不是多用户安全的。Redis有2个可用于简单计数器的命令:INCRBY和INCRBYFLOAT,但不幸的是Redis本身不支持模运算。目前我看到的唯一方法是使用EVAL命令并编写一些lua脚本。更新1:一些lua模拟INCRBYLCG_Value((LCG_Value*a+c)%m)-LCG_V