当前位置:  开发笔记 > 编程语言 > 正文

Park-Miller-Carta PRNG随机发生器总是返回2.33E-10

如何解决《Park-Miller-CartaPRNG随机发生器总是返回2.33E-10》经验,为你挑选了1个好方法。

我正在尝试使用Park-Miller-Carta PRNG随机数生成器的Java实现.

下面是在ActionScript 3的随机函数的实现从这里.

return (_currentSeed = (_currentSeed * 16807) % 2147483647) / 0x7FFFFFFF
                                                          + 0.000000000233;

我没有太多运气在Java中工作:

int seed = 20; //for example.

public double random() {
    seed = (seed * 16807) % 2147483647;
    return seed / 0x7FFFFFFF + 0.000000000233;
}

这总是会回来的2.33E-10.我在Java中做错了什么想法?(AS3代码返回0.0001565276181885122,然后返回0.6307557630963248前两个带有种子的响应20).



1> Artelius..:
seed / 0x7FFFFFFF

是一个整数运算,因为两个参数都是整数.整数除法总是向下舍入"真实"结果.在这种情况下,真实结果介于0和1之间,因此操作始终返回0.

要获得浮点结果,至少有一个参数必须是float,可以这样实现:

return (double)seed / 0x7FFFFFFF + 0.000000000233;

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有