|
|
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为中心的函数,只使用
|
|
|
Muhammad Umer · 为什么这个随机数猜谜游戏模拟产生5.8 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
D W · Python-将浮点数从2转换为10到100位小数 1 年前 |
|
|
Bartol · 确定python龟图形中的角度 2 年前 |
|
|
randomAlgo · 将弹簧设置为相同长度的成本最低 2 年前 |
|
Fyodor · 在C中使用sin和cos计算数学表达式不正确? 2 年前 |
|
Sergio · python中大量数字的乘法 2 年前 |