由等概率生成的0和1構建rand()函式

orchid發表於2013-09-21

問題:有函式rand01()能夠等概率的生成0和1,用rand01生成rand(n),使其能夠等概率的生成0-n-1的整數。

java程式碼:

 1 public int rand(int n){
 2         while(true){
 3             int bits=(int)Math.ceil((Math.log(n)/Math.log(2)));
 4             int v=0;
 5             for(int i=0;i<bits;i++){
 6                 if(random01()==1){
 7                     v|=(1<<i);
 8                 }
 9             }
10             if(v<n){
11                 return v;
12             } 
13         }
14     }

 

相關文章