c – 无法为整数生成全范围的随机数

c – 无法为整数生成全范围的随机数,第1张

概述我试图生成一个介于0和100 000之间的10000个整数的文件,所以我可以在以后对它们进行MergeSort. 当我使用fstream生成文件时,我从未得到超过32760的整数. 下面的方法生成文件,然后将其读回并检查32750以上的任何整数.我通常在32750和32760之间得到3-5个整数.为什么会发生这种情况,我该如何解决?是种子问题还是随机函数的实际使用? // sizeOfArray 我试图生成一个介于0和100 000之间的10000个整数的文件,所以我可以在以后对它们进行MergeSort.

当我使用fstream生成文件时,我从未得到超过32760的整数.

下面的方法生成文件,然后将其读回并检查32750以上的任何整数.我通常在32750和32760之间得到3-5个整数.为什么会发生这种情况,我该如何解决?是种子问题还是随机函数的实际使用?

// sizeOfArray = 10000voID 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.

解决方法 可以从rand()获得的最高随机值是RAND_MAX,这是一个依赖于库的常量.在您的情况下,它似乎设置为2 ^ 15-1,这是符合有符号16位整数的最高正数.

当您需要生成大于RAND_MAX的数字时,请多次调用rand(),每次乘以RAND_MAX.例如,在您的情况下,以下代码应该工作(我假设您的int有32位):

num = rand();num *= RAND_MAX;num += rand();num %= 100000;

注意,仅仅将三个随机数加在一起以获得期望的范围将不会产生与乘法和加法相同的随机分布.

总结

以上是内存溢出为你收集整理的c – 无法为整数生成全范围的随机数全部内容,希望文章能够帮你解决c – 无法为整数生成全范围的随机数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1219869.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存