【发布时间】:2013-12-26 23:26:19
【问题描述】:
我知道一个; ZX Spectrum apparently 使用模数为 65537 和乘数为 75 的 Lehmer RNG。这只会生成大于零的数字。但是,我想使用周期超过 2^16 - 1 的东西。
我在整数(Haxe)的 32 位字长的语言中使用它,所以理想情况下它会小于 2^31。但是,我不一定要寻找特定于 Haxe 的答案。
【问题讨论】:
-
否定只是解释...
-
恐怕看不懂,要详细说明吗?我正在寻找从函数返回一个正整数。我尝试了显而易见的方法,但使用 Math.abs() 大大减慢了速度。
-
你看过这个页面吗? en.wikipedia.org/wiki/Linear_congruential_generator您通过在输出中不包含符号位来生成正值。
-
使用 Math.Abs() 大大减慢了速度?这似乎不对……
if (result < 0) return -1 * result;怎么样? -
或者你可以将结果与 0x7FFFFFF 相加。这将清除任何负面结果的高位。即
return result & 0x7FFFFFF;