2011-01-12 55 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

回答