c语言中随机函数怎么取1~2x之间的数

[复制链接]
查看11 | 回复3 | 2008-3-26 20:36:13 | 显示全部楼层 |阅读模式
加多少?我考虑考虑//在下面的函数中可以实现产生一个在一个区间之内的平均分布的随机数,精度是4位小数。double AverageRandom(double min,double max){ int minInteger = (int)(min*10000); int maxInteger = (int)(max*10000); int randInteger = rand()*rand(); int diffInteger = maxInteger - minInteger; int resultInteger = randInteger % diffInteger + minInteger; return resultInteger/10000.0;}main(){double x;scanf("%f",&x);double num = AverageRandom(1,2*x);printf.......//略 }
回复

使用道具 举报

千问 | 2008-3-26 20:36:13 | 显示全部楼层
以上的这些方法并不能保证所得到的随机数是1~2x的均匀分布,因为rand()的最大值为未必能被2x整除,所以会有问题!而且如果2x大于rand()的最大值的话,那么大于那部分的数值将无法取到。to 自由的菜鸟: 你用rand()*rand()你考虑过没有,所得到的结果并不是一个均匀的分布,至少结果里面素数产生的概率就很小,而且0产生的概率很大(任意一次产生的随机数是0,那么结果就是0),而1产生的概率明显小于0的概率(只有两次产生的随机数都为1时,结果才为1),大于rand()最大值的素数根本不会产生。
回复

使用道具 举报

千问 | 2008-3-26 20:36:13 | 显示全部楼层
我以为你是要1到二十几之间的随机数呢,a=rand()%(2*10+x)+1a就是1-2x之间的随机数了如果是1-2x之间的就是rand()%2x +1
回复

使用道具 举报

千问 | 2008-3-26 20:36:13 | 显示全部楼层
rand()%(2*x)+1
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行