也有類似的問題,但其中大多數都與語言相關。我在尋找一個通用的解決方案。給定一些方法來產生隨機字節和數字n,我需要產生範圍爲1 ... n(含)的隨機數。在隨機字節的給定範圍內生成隨機數
我已經想出到目前爲止:
- 爲了確定表示Ñ所需的字節數,計算
f(n):=ceiling(ln(n)/8ln(2))=ceiling(0.180337*ln(n))
- 獲取範圍爲的一個隨機數1 ... 2^8f(n)對於0索引字節b [i]:
擴展到1 ... N無偏差:
R(n,r) := ceiling(n * (r/256^f(n)))
r:=0 for i=0 to k-1: r = r + b[i] * 2^(8*i) end for
但我不確定這不會造成偏見或一些微妙的一次性錯誤。你能檢查這個聲音和/或提出改進建議嗎?這是正確的方法嗎?
在回答中,請假定沒有可用的模塊化位操作,但您可以假設任意精確的算術運算。 (我在Scheme中編程)
編輯:我的方法肯定有問題,因爲在我的測試中,擲骰子產生了一些0的情況!但錯誤在哪裏?