我正在尝试使用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
).
seed / 0x7FFFFFFF
是一个整数运算,因为两个参数都是整数.整数除法总是向下舍入"真实"结果.在这种情况下,真实结果介于0和1之间,因此操作始终返回0.
要获得浮点结果,至少有一个参数必须是float,可以这样实现:
return (double)seed / 0x7FFFFFFF + 0.000000000233;