由等概率生成的0和1构建rand()函数

问题:有函数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     }

 

posted @ 2013-09-21 16:21  orchid  阅读(621)  评论(0编辑  收藏  举报