estimate.bc (467B)
1 p_a = 0.8 2 p_b = 0.5 3 p_c = p_a * p_b 4 weights[0] = 1 - p_c 5 weights[1] = p_c / 2 6 weights[2] = p_c / 4 7 weights[3] = p_c / 4 8 define mixture(){ 9 p = sample_unit_uniform() 10 if(p <= weights[0]){ 11 return 0 12 } 13 if(p <= (weights[0] + weights[1])){ 14 return 1 15 } 16 if(p<= (weights[0] + weights[1] + weights[2])){ 17 return sample_to(1, 3) 18 } 19 return sample_to(2, 10) 20 } 21 n_samples = 1000000 22 sum=0 23 for(i=0; i < n_samples; i++){ 24 sum += mixture() 25 } 26 sum/n_samples 27 halt