time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

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