// 1. rand() 的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。
// 2. rand() 返回一随机数值的范围在 0 至 RAND_MAX 间。RAND_MAX 的范围最少是在32767 之间(int)
// 3. rand() 产生的是伪随机数字,每次执行时是相同的; 若要不同, 用函数 srand() 初始化它。
// 4. rand() 不是线程安全的。
int main(int argc, char** argv) {
srand(static_cast
// 要取得 [a,b) 的随机整数
int RandomBetweenLBRB(int a, int b) {
srand(static_cast
// 要取得 [a,b] 的随机整数
int RandomBetweenLBRB(int a, int b) {
srand(static_cast
// 要取得 (a,b] 的随机整数
int RandomBetweenLURB(int a, int b) {
srand(static_cast
2. rand_r()函数, rand_r线程安全,且种子和随机放在一个函数里,但是种子必须是1个可以被修改的值,每次rand都会修改种子
```c
unsigned int seed = static_cast<unsigned int>(time(NULL));
int randomValue = rand_r(&seed);
printf("randomValue: %d, seed changed as: %u\n", randomValue, seed);
可以进行封装
class Rng {
public:
Rng() { seed_ = static_cast<unsigned int>(time(NULL)); }
Rng(unsigned int seed) : seed_(seed) {}
void SetSeed(unsigned int newseed) { seed_ = newseed; }
int Rand() { return rand_r(&seed_); }
private:
unsigned int seed_;
};
template
int main(int argc, char** argv) {
static std::default_random_engine engine(std::random_device{}());
static std::uniform_int_distribution
// 测试randomInt
for (auto i = 0; i < 100; i++) {
std::cout << randomInt<1, 6>() << ", ";
}
return 0;
} ```