Commit 87053a6d authored by Julien David's avatar Julien David
Browse files

approximation trick

parent 056b9bb7
Loading
Loading
Loading
Loading
+2 −8
Changes for src/RandomDistributionGenerator.hpp: 2 added lines, 8 removed lines.
Original line number Diff line number Diff line
@@ -64,8 +64,7 @@ private:
    long double aim_p = cf.aim_double(p, sum-p);
    // If the target is unreachable, exit function, only happens when precision error occurs
    //assert(sum<=1);
    if(aim_p < target || cf.aim_double(EPSILON, sum-EPSILON) > target) {
      //std::cout<<"FAILURE "<<aim_p<<" "<<target<<" "<<cf.aim_double(EPSILON, sum-EPSILON)<<std::endl;
    if((double)aim_p < (double)target || (double)cf.aim_double(EPSILON, sum-EPSILON) > (double)target) {
      return -1.;
    }
    while ((double)step > (double)EPSILON && (double) aim_p != (double) target && p > 0){
@@ -115,7 +114,7 @@ private:
    distribution[size-1] = EPSILON;
    min_aim = cf.h(cf.contribution(distribution, size), size);
    
    while( (max_aim < target || min_aim > target) && delta > EPSILON ){
    while( (max_aim < target || min_aim > target) && delta > EPSILON && (double)max_aim != (double)target && (double)min_aim != (double)target){
      __FIRST_STATE_ITERATIONS__++;

      if( min_aim > target )
@@ -132,7 +131,6 @@ private:
      min_aim = cf.h(cf.contribution(distribution, size),size);

      delta/=2;
      //std::cout<<"x:"<<distribution[0]<<" min:"<<min_aim<<" max:"<<max_aim<<" IT:"<<__FIRST_STATE_ITERATIONS__<<" delta:"<<delta<<std::endl;
    }
    contribution = cf.contribution(distribution, size-2);
    update = cf.update_target(target, contribution, size, size-2);
@@ -158,10 +156,6 @@ private:
    target = cf.aim_triple(dist[triplet[0]],dist[triplet[1]], dist[triplet[2]]);
    step[0] = cf.random_value_in_approx_interval(sum, target);
    
    //std::cout<<"Pas "<<dist[triplet[0]]<<" "<<dist[triplet[1]]<<" "<<dist[triplet[2]]<<" Somme="<<sum<<" "<<step[0]<<std::endl;
    
    //assert(step[0] >= 0);
    //assert(step[0] <=1);
    if(step[0] < sum){
      step[1] = aim_concave_value(sum - step[0], cf.update(target, step, 3, 1));