我想生成一个0的随机流& 1(10000次迭代)约束条件下1应该只发生在400次迭代中的任何一次。可以帮助我的人用它的C代码以及在C中使用的库和函数。若要生成具有一定约束的随机位模式
0
A
回答
1
400.0 * rand()/(RAND_MAX + 1.0) < 1 ? 1 : 0
是一种方式。
如果您感到自信并且表达式与左值类型匹配,则删除三元组。请注意仔细安置400.0
和1.0
。
(重要提示:如果你在400的概率需要一种精确的1不接受这个解决方案该解决方案将无法正常工作,如果RAND_MAX是400一个“非常差多个”鉴于该标准规定RAND_MAX不低于32767,在这个低值下,这种技术的统计特性将会很差。)
+0
['rand()'认为有害](http://www.youtube.com/watch?v=LDPMpc-ENqY)也解释了为什么此解决方案存在问题。 – bitmask
1
这里有一个解决方案,它提前选择一个间隔为400的点击并在它出现时报告它;否则它会发出0.当报告结果时,下一个时间间隔的命中由rand()
确定。该functon保持其状态static
变量,并使用特殊值-1初始化本身:
int pick(int n)
{
return 400 * rand()/((double) RAND_MAX + 1);
}
int next()
{
static int hit = -1;
static int count;
if (hit < 0) hit = pick(WIDTH);
if (count++ == hit) {
hit = ((hit/WIDTH) + 1) * WIDTH + pick(WIDTH);
return 1;
}
return 0;
}
你这样称呼它:
for (i = 0; i < 10000; i++) {
printf("%8d %d\n", i, next());
}
这是拔示巴的解决方案不同,因为它保证了如果您的示例是400的倍数,则分配1:399。这意味着它可能不是您要查找的内容。
编辑我介绍了一个新的功能pick
,其拍摄之间的随机数0(includive)和n
(独家),它希望提供比模功能的更好的分配。
相关问题
- 1. 生成具有约束
- 2. 生成随机整数与差约束
- 3. 随机数生成 - 约束序列
- 4. 生成一个具有指定位数的随机整数Java
- 5. 随机生成约束条件以生成约束Delaunay三角剖分
- 6. 如何生成一个具有小数位的随机数
- 7. 生成具有一定平均差的随机数列表
- 8. 生成一个具有特定负数的随机向量
- 9. 生成具有一定概率的随机数
- 10. 产生一列不具有UNIQUE约束
- 11. 在约束条件下生成随机哑元
- 12. 若要计算有关约束的总和
- 13. 生成具有随机行长度的随机二维数组
- 14. 数据生成:生成一个具有多个日期约束的实体
- 15. 生成8位唯一随机数
- 16. 生成一个N位随机数
- 17. 生成所有具有订单约束的排列
- 18. 生成具有某种约束的所有排列
- 19. 具有唯一约束
- 20. 模式不具约束力的行动
- 21. 如何生成具有指定平均值的随机数
- 22. 生成具有特定傅里叶光谱的随机数
- 23. 生成具有特定分布的随机样本
- 24. 生成具有特定分布的随机数字c
- 25. XML模式唯一约束
- 26. 随机生成一个随机布尔
- 27. 随机数生成公式?
- 28. 受约束的随机数总是总的约束与JavaScript/jquery
- 29. Rails生成模型 - 字段约束?
- 30. 生成给定模式的随机文本字符串
我已经添加了随机标签。可能有比我更好的方法,可以为这种不对称的伯努利分布提供更好的统计特性。 – Bathsheba
你想'0'发生的次数是'1'的399倍吗?或者你想'0'的概率是获得'1'的概率的399倍? – bitmask