我想生成一個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