2011-01-12 60 views
2

目前我使用的是非常快的XorShift算法:什麼是隨機數生成的快速模取代?

inline uint r() { 
    static uint y = 2463534242u; // seed 
    y ^= (y<<13); 
    y ^= (y>>17); 
    y ^= (y<<5); 
    return y; 
} 

現在我想從生成區間[0,正整數)。當然我可以這樣做:

r() % n 

但是這很慢。有更快的方法嗎?

PS 區間內不同數字概率的小不等式是可以接受的。

+1

這xorshift`r`功能長得挺像http://xkcd.com/221/。 – user562374 2011-01-12 13:28:37

+0

你如何定義緩慢? DIV指令可用於此目的,它在現代x86(i7)上運行26個時鐘週期,在Core2上運行40個時鐘週期。 – 2011-01-12 13:35:57

回答