我正嘗試在Javacript中創建自定義線性同餘發生器(用於glibc中的一個)。
其規定的性質如下:on wikipedia是:m=2^31
,a=1103515245
,c=12345
。Javascript中的自定義線性同餘發生器
現在我得到下一個種子值與
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
現在像素座標並非如此使用模操作時非常格格不入。
更新小提琴:http://jsfiddle.net/7VmR9/14/
對我來說,它的價值似乎是1?也許它應該是2^31 +1?我做了一個動畫來顯示不同的值。 http://jsfiddle.net/cHbXk/ –