C++自带或简单代码的随机数发生器性能:
1亿次生成
minstd(32位) 1045ms
mt19937(32位,需要5000字节存储) 640ms
rand(VS 15位) 3089ms
JKISS32(32位) 218ms
lfsr113_Bits(32位) 375ms
unsigned int JKISS32() {
static unsigned int x = 123456789, y = 234567891, z = 345678912, w = 456789123, c = 0;
y ^= (y << 5); y ^= (y >> 7); y ^= (y << 22);
t = z + w + c; z = w; c = t < 0; w = t & 2147483647;
x += 1411392427;
return x + y + w;
}
unsigned int lfsr113_Bits(void)
{
static unsigned int z1 = 12345, z2 = 12345, z3 = 12345, z4 = 12345;
unsigned int b;
b = ((z1 << 6) ^ z1) >> 13;
z1 = ((z1 & 4294967294U) << 18) ^ b;
b = ((z2 << 2) ^ z2) >> 27;
z2 = ((z2 & 4294967288U) << 2) ^ b;
b = ((z3 << 13) ^ z3) >> 21;
z3 = ((z3 & 4294967280U) << 7) ^ b;
b = ((z4 << 3) ^ z4) >> 12;
z4 = ((z4 & 4294967168U) << 13) ^ b;
return (z1 ^ z2 ^ z3 ^ z4);
}
std::minstd_rand gen_std; gen_std();
std::mt19937 gen_mt; gen_mt();
rand();
JKISS32();
lfsr113_Bits();