1
1
MSDN says 以下内容:
在使用带有数字参数的随机化之前,仅显示带有负参数的调用rnd的代码示例之一。 如果代码B调用RND(-1),它应该在所有运行中生成相同的序列。如果运行代码B(带RND(-1))生成的序列重复运行代码A(不带RND(-1))生成的序列,则不同运行的代码A必须生成相同的序列。这与msdn中的信息相矛盾。 |
2
1
第二组代码按预期工作,并将重复地为您提供同一组4个数字。 第一组没有,因为它缺少RND(-1)条目。AS MSDN 说:
连续运行第一组3次得到:
从第二组代码中删除RND(-1)条目将得到与第一组代码相同的结果。功能按预期工作。随机种子序列,但不重新启动它-只有RND(负数)这样做。 基本上,第一组代码是在您无法控制的序列中的某个点开始随机数生成。 |
3
1
你早就回答了你的主要问题,我参加晚会有点晚了。这是我的第一篇文章,因此我没有声誉对您关于舍入错误的第二个问题添加评论,但这里是: 我最近调用Reflector来反编译vbMath的实现。我想制作一个非静态版本,这样就可以同时运行多个线程安全vb6兼容的rnd()序列。 我也犯了和你同样的错误。我花了一段时间,但我发现反射镜(我想)弄坏了其中一个常量:
在
到
How Visual Basic Generates Pseudo-Random Numbers for the RND Function 具有正确的常量。 |
4
0
回答问题是,由于遗留代码不使用负值调用RND,生成器不清除其状态,对RND的调用被链接到种子的前一个值(在本例中是硬编码值)。 为了解决这个问题,并且能够在没有“复制”初始状态的所有问题的情况下重复整个过程,我克隆了生成器代码并对其进行了修补,这样每次都可以根据参数复制相同的情况。 我知道。。很难看……但它解决了我的问题(顺便说一句,我也知道有一些舍入错误,生成的值不准确)。它们在最后一个数字或其他方面有所不同),但我不需要精确的精度。 舍入误差可能来自于我对算法克隆语言的选择。如果有人能帮助获得完全相同的结果(匹配舍入误差),那就太好了。 补丁代码如下。
|
5
0
这里的任何人都是我的Java版本
使用private static int m=(int)math.pow(2,24);而不是1.677722e+07f修复了我的舍入问题。 |
6
-1
我将远离以VB为中心的函数,只使用
|
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |
Wadu Hek · 查找列表中唯一的重复项 2 年前 |
Crawford Patten · 如何获得整数列表的四分位数 2 年前 |
MoonGoose · 如何在python中围绕特殊字符创建空间? 2 年前 |
taha khamis · 在一个数字中组合元素的省道 2 年前 |
Soup · 比O(n)更快地找到阶乘n模m 2 年前 |
BigO · 单词积分游戏不断增加数字[关闭] 2 年前 |