比 rand() 快吗?

Kev*_*n P 5 c random

我正在研究一种需要尽快生成数百万个数字的算法。实际上我发现我的算法的 rand() 函数占用了 75% 的处理时间。

所以我正在寻找更快的东西。而且我根本不需要大范围。(我只需要 1000 以下的整数)

你知道我可以使用的东西吗?

谢谢 !

编辑 :

我使用这个数字来洗牌少于 1000 个实体的组。

我发现了更多关于“快速兰特”的信息。还有 SSE 版本,速度更快,一次生成 4 个数字。

https://software.intel.com/en-us/articles/fast-random-number-generator-on-the-intel-pentiumr-4-processor/

Asi*_*sis 6

static unsigned int g_seed;

// Used to seed the generator.           
inline void fast_srand(int seed) {
    g_seed = seed;
}

// Compute a pseudorandom integer.
// Output value in range [0, 32767]
inline int fast_rand(void) {
    g_seed = (214013*g_seed+2531011);
    return (g_seed>>16)&0x7FFF;
}
Run Code Online (Sandbox Code Playgroud)

  • 您从哪里得知这比 Kevin 机器上的“rand()”实现更快? (2认同)