docs: private void updateThreshold(int i)
      {
          double Fi = fcache[i];
          double F_tilde_i = b_low;
          
          if (I0_b[i] || I2[i])
              F_tilde_i = Fi + epsilon;
          else if (I0_a[i] || I1[i])
              F_tilde_i = Fi - epsilon;
          
          double F_bar_i = b_up;
          if (I0_a[i] || I3[i])
              F_bar_i = Fi - epsilon;
          else if (I0_b[i] || I1[i])
              F_bar_i = Fi + epsilon;
          
          //update the bounds
          
          if (b_low < F_tilde_i)
          {
              b_low = F_tilde_i;
              i_low = i;
          }
          
          if (b_up > F_bar_i)
          {
              b_up = F_bar_i;
              i_up = i;
          }
      }