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