每当我运行以下程序时,返回值总是 6 或 13。
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
//void randomLegs();
//void randomPush();
//void randomPull();
//void randomMisc();
int main(int argc, const char * argv[])
{
srand(time(NULL));
//randomLegs();
cout << rand() % 14;
return 0;
}
今天和昨天我已经运行了将近一百次程序。
谁能告诉我我做错了什么?
谢谢。
编辑:顺便说一句,如果我将 rand() 的范围更改为 13 或 15,它就可以正常工作。
最佳答案
根据 wikipedia ,Apple 的 MCG 随机数生成器中使用的乘数是 16807。它可以被 7 整除,所以 srand()
之后产生的第一个随机数只有一位熵 mod 14
(也就是说,它只能取两个值)。
他们那里的随机数生成器很糟糕。不过,一个简单的解决方案是在 srand
之后立即调用 rand()
几次,然后丢弃结果。
关于c++ - Rand() % 14 只生成值 6 或 13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28441158/