随机数效率测试

随机数效率测试

1
2
3
4
5
6
int main(int argc, char** argv) {
for (int i = 0; i < 100000000; ++i) {
test_func();
}
return 0;
}

测试命令:-Wall -O0 -fno-ms-extensions -std=c++14

编译器:g++ (tdm64-1) 4.9.2(mingw-w64)

随机数生成器 平均运行时间(ns)
std::minstd_rand0 10.98
std::minstd_rand 11.96
std::mt19937 11.82
std::mt19937_64 9.93
std::ranlux24_base 12.57
std::ranlux48_base 10.31
std::ranlux24 112.13
std::ranlux48 343.49
std::knuth_b 21.41
std::rand 10.69
shift32 8.30
shift64 7.58

shift32shift64 如下(感谢 zez 同学提供)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
std::uint64_t x;
std::uint64_t shift64() {
x ^= x << 13;
x ^= x >> 17;
x ^= x << 5;
return x;
}
std::uint32_t y;
std::uint32_t shift32() {
y ^= y << 13;
y ^= y >> 17;
y ^= y << 5;
return y;
}