加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 给定均匀随机数生成器生成随机数

发布时间:2020-12-16 10:29:30 所属栏目:百科 来源:网络整理
导读:我被要求使用随机(0,1)在a和b之间生成一个随机数. random(0,1)生成0到1之间的均匀随机数. 我回答了 (a+(((1+random(0,1))*b))%(b-a)) 我的采访者对这段表达中对b的使用不满意: (((1+random(0,1))*b)) 然后我尝试将我的答案改为: int*z=(int*)malloc(sizeof
我被要求使用随机(0,1)在a和b之间生成一个随机数. random(0,1)生成0到1之间的均匀随机数.

我回答了

(a+(((1+random(0,1))*b))%(b-a))

我的采访者对这段表达中对b的使用不满意:

(((1+random(0,1))*b))

然后我尝试将我的答案改为:

int*z=(int*)malloc(sizeof(int));
(a+(((1+random(0,1))*(*z)))%(b-a));

后来问题改为从随机(1,5)生成随机(1,7).我回答:

A = rand(1,5)%3
B = (rand(1,5)+1)%3
C = (rand(1,5)+2)%3

rand(1,7) = rand(1,5)+ (A+B+C)%3

我的答案是否正确?

解决方法

我认为你在随机整数生成器和随机浮点数生成器之间感到困惑.在C中,rand()生成0到32K之间的随机整数.因此,为了生成从1到10的随机数,我们写入rand()%10 1.因此,要生成从整数a到整数b的随机数,我们写rand()%(b – a 1)a.

面试官告诉你,你有一个从0到1的随机生成器.它意味着浮点数生成器.

如何以数学方式得到答案:

>将问题转换为简单形式,使下限为0.
>通过乘法缩放范围
>重新切换到所需范围.

例如:生成R这样的

a <= R <= b.  
Apply rule 1,we get a-a <= R - a <= b-a 
                       0 <= R - a <= b - a.

认为R – a为R1.如何生成R1使得R1的范围从0到(b-a)?

R1 = rand(0,1) * (b-a)   // by apply rule 2.

现在用R替换R1 – a

R - a = rand(0,1) * (b-a)    ==>   R = a + rand(0,1) * (b-a)

====第二个问题 – 没有解释====

我们有1 <= R1 <= 5

==>   0 <= R1 - 1             <= 4
==>   0 <= (R1 - 1)/4         <= 1
==>   0 <= 6 * (R1 - 1)/4     <= 6
==>   1 <= 1 + 6 * (R1 - 1)/4 <= 7

因此,Rand(1,7)= 1 6 *(rand(1,5)-1)/ 4

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读