簡體   English   中英

如何從隨機位生成范圍內的整數

[英]How to generate integers within a range from random bits

我有一個隨機位源,我想將其按摩成各種大小的整數,與流行骰子的大小(1-4、1-6 等)大致相關

我正在編寫的代碼是 PHP,因此使用該語言的響應是理想的。 但是,算法通用響應也完全可以。

我更喜歡一個更復雜的答案,而不是簡單地用我的隨機數據塊播種 PHP 的 random() function。

如果您有任意數量的可用位,您可能會選擇使用拒絕方法,類似於 Java 的Random.nextInt(int) 從那里獲取的偽代碼是:

public int nextInt(int n) {
     if (n<=0)
         new IllegalArgumentException("n must be positive");

     if ((n & -n) == n)  // i.e., n is a power of 2
         return (int)((n * (long)next(31)) >> 31);

     int bits, val;
     do {
         bits = next(31);
         val = bits % n;
     } while(bits - val + (n-1) < 0);
     return val;
 }

next()是一個 function ,它返回指定數量的隨機位,連接成一個int 你可以用你的隨機位源替換它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM