【发布时间】:2013-04-09 17:58:34
【问题描述】:
我正在尝试生成一个包含 0 到 100 000 之间的 10000 个整数的文件,以便稍后对它们进行 MergeSort。
当我使用 fstream 生成文件时,我从来没有得到超过 32760 的整数。
以下方法生成文件,然后将其读回并检查任何超过 32750 的整数。我通常会得到介于 32750 和 32760 之间的 3-5 个整数。为什么会发生这种情况,我该如何解决?是种子问题还是Random函数的实际使用?
// sizeOfArray = 10000
void generateFile() {
ofstream fout("unsorted.txt");
srand(time(NULL));
// Generating the file
int num;
for(int i = 0; i < sizeOfArray; i++) {
num = rand() % 100000;
if(i < sizeOfArray-1)
//fout << i+1 << ": " << num << endl;
fout << num << endl;
else
//fout << i+1 << ": " << num;
fout << num;
}
// Reading the File Back
ifstream fin("unsorted.txt");
for(int i = 0; i < sizeOfArray; i++) {
fin >> num;
if(num > 32750)
cout << num << endl;
}
cin.get();
}
已解决
使用下面提供的答案,我生成了 500 次文件
我收到的最高整数是 99931。
【问题讨论】:
-
即随机数生成器的范围。使用不同的随机数生成器,或者取两个随机数并将它们组合成一个。
-
根据cplusplus.com,
rand()的范围是0 - RAND_MAX。RAND_MAX依赖于库,但至少应该是32767。 -
你知道可以给我所需范围的随机数生成器吗?
-
P.S.这实际上是一个很好的问题——在这个时代,随机数的范围应该这么小并不明显。你遇到的限制在 20 年前会更合适。
-
添加 3 个随机数不会给你一个平等的分布。这与掷两个骰子更有可能得到 7 而非 2 的原因相同。
标签: c++ file-io random ifstream