Unbias a random generator: Difference between revisions
Content added Content deleted
m (J: radically reduce recursion depth for short lists) |
(+Java) |
||
Line 19: | Line 19: | ||
unbiased 10#6 |
unbiased 10#6 |
||
1 0 0 1 0 0 1 0 1 1</lang> |
1 0 0 1 0 0 1 0 1 1</lang> |
||
=={{header|Java}}== |
|||
<lang java>public class Bias{ |
|||
public static int biased(int probOf1Denom){ |
|||
if(Math.random() < 1.0 / probOf1Denom){ |
|||
return 1; |
|||
}else{ |
|||
return 0; |
|||
} |
|||
} |
|||
public static int unbiased(int probOf1Denom){ |
|||
int rand1 = biased(probOf1Denom); |
|||
int rand2 = biased(probOf1Denom); |
|||
while(rand1 == rand2) { |
|||
rand1 = biased(probOf1Denom); |
|||
rand2 = biased(probOf1Denom); |
|||
} |
|||
return rand1; |
|||
} |
|||
public static void main(String[] args){ |
|||
int biased1 = 0, biased0 = 0, unbiased1 = 0, unbiased0 = 0; |
|||
int probDenom = 6; |
|||
for(int i = 0; i < 1000; i++){ |
|||
if(biased(probDenom) == 1){ |
|||
biased1++; |
|||
}else{ |
|||
biased0++; |
|||
} |
|||
if(unbiased(probDenom) == 1){ |
|||
unbiased1++; |
|||
}else{ |
|||
unbiased0++; |
|||
} |
|||
} |
|||
System.out.println("Biased 1 percentage: " + biased1 / 10.0); //1000 generations |
|||
System.out.println("Biased 0 percentage: " + biased0 / 10.0); |
|||
System.out.println("Unbiased 1 percentage: " + unbiased1 / 10.0); |
|||
System.out.println("Unbiased 1 percentage: " + unbiased0 / 10.0); |
|||
} |
|||
}</lang> |
|||
Output: |
|||
<pre>Biased 1 percentage: 17.3 |
|||
Biased 0 percentage: 82.7 |
|||
Unbiased 1 percentage: 51.9 |
|||
Unbiased 1 percentage: 48.1</pre> |
|||
=={{header|Python}}== |
=={{header|Python}}== |
||
<lang python>from __future__ import print_function |
<lang python>from __future__ import print_function |