鱼C论坛

 找回密码
 立即注册
查看: 1117|回复: 7

[已解决]随机数的生成

[复制链接]
发表于 2019-7-17 15:38:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
生成0到99的随机数.png 请问为什么生成0到99的随机数要这样算
最佳答案
2019-7-18 19:13:13
%是取余操作符,对100取余的结果必然小于100。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-17 16:57:23 | 显示全部楼层
直接random(1,100)
生成1-100随机数不可以吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-17 23:15:29 | 显示全部楼层
本帖最后由 bin554385863 于 2019-7-18 02:08 编辑

你要明白% 作为C语言的运算的含义,就不会问这个问题了
%作为运算符在C语言的含义是取余运算,说白了就是取两个数相除的余数.

rand()%100, 不管rand()随机到的数是多少,它除以100的余数不可能>=100
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 02:09:38 | 显示全部楼层
minjun 发表于 2019-7-17 16:57
直接random(1,100)
生成1-100随机数不可以吗

兄弟C语言没有这种写法和函数.

这种方法是Python的吧.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 13:21:47 | 显示全部楼层
毕竟是伪随机,你可以自己写个函数就,通过一系列运算,传入参数,传出随机值。本质上和随机数算法没有区别,系统自带的只不过封装成库了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 14:03:48 | 显示全部楼层
其实,个人认为,这种算法是有一点问题的。
rand()生成的是0-32767之间的随机数,你把这个数以100为除数取余的话,那么0-67的概念将比68-99的概率高1/327。
1/327的影响也许不大。但是,随着范围的增长,这个误差将随之变大,
比如,如果你想要的范围是20000以内的随机数的话,那么0-12767的概率将是剩下的数的两倍。

要改善这个问题,可以考虑两个方法,
一、对于多出来的概率,可以考虑将其舍去:
  1. int randint(int lowbound, int highbound) {
  2.         int range = highbound - lowbound;
  3.         int ret;
  4.         while ((ret = rand()) / range == 32768 / range);  //如果得到的值是“多出来的概率”,那么将再次计算;
  5.         return ret % range + lowbound;
  6. }
复制代码


二,可以考虑将这个rand的范围再扩大,以减小误差:
  1. unsigned int rand32() {
  2.         return rand() << 16 + rand();
  3. }
复制代码


总之就是这个方法虽然大家都在用,但是也不要无脑使用,当随机的范围较大或者要求的“随机性”较高时,需要考虑下是否需要做一些其他的处理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 14:52:40 | 显示全部楼层
bin554385863 发表于 2019-7-18 02:09
兄弟C语言没有这种写法和函数.

这种方法是Python的吧.

抱歉,没有看清楚 哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 19:13:13 | 显示全部楼层    本楼为最佳答案   
%是取余操作符,对100取余的结果必然小于100。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 07:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表