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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |