【发布时间】:2013-07-11 14:31:31
【问题描述】:
我正在尝试在 JavaScript(glibc 中使用的那个)中创建一个自定义 linear congruential generator (LCQ)。
它的属性on Wikipedia 是:m=2^31,a=1103515245,c=12345。
现在我正在获得下一个种子价值
x = (1103515245 * x + 12345) % 0x80000000 ; // (The same as &0x7fffffff)
虽然生成器似乎可以工作,但是在画布上测试数字时:
cx = (x & 0x3fffffff) % canvasWidth; // Coordinate x (the same for cy)
他们似乎有可怕的偏见:http://jsfiddle.net/7VmR9/3/show/
为什么会这样?通过选择不同的模数,视觉测试的结果看起来会更好。
测试 JSFiddle 在这里:http://jsfiddle.net/7VmR9/3/
更新
最后我将转换固定为画布坐标,如下公式:
var cx = ((x & 0x3fffffff)/0x3fffffff*canvasWidth)|0
现在像素坐标不像使用模运算时那样畸形了。
【问题讨论】:
-
对我来说,这个值好像减了 1?也许应该是 2^31 +1?我制作了一个动画来显示不同的值。 jsfiddle.net/cHbXk
标签: javascript canvas random functional-testing lcg