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/
업데이트 I이 화학식과 좌표 캔버스 변환 고정 마침내
:
var cx = ((x & 0x3fffffff)/0x3fffffff*canvasWidth)|0
이제 픽셀 좌표 그렇게하지 모듈러스 연산을 사용할 때와 같이 많이 변형됩니다.
업데이트 바이올린 : 나는 당신이 내가이 너무로 바이올린을 업데이트 최적화하려고 실현
current = (multiplier * current * modul + addend) % modulus)/modulus
: 공식은 발전기에 대한 http://jsfiddle.net/7VmR9/14/
내게는 값이 1 빗나가는 것처럼 보였습니까? 아마도 2^31 +1일까요? 다른 값을 보여주기 위해 애니메이션을 만들었습니다. http://jsfiddle.net/cHbXk/ –