private void findBracket() {

    if (myWFunction.fx(1.0) > 0.0) {
      myAlphaPos = 1.0;
      double alpha = 1.0;
      do {
        alpha = alpha * 2.0;
      } while (myWFunction.fx(alpha) >= 0.0); // when f(a) < 0, then it drops out of the while loop
      myAlphaNeg = alpha;
    } else {
      myAlphaNeg = 1.0;
      double alpha = 1.0;
      do {
        alpha = alpha / 2.0;
      } while (myWFunction.fx(alpha) <= 0.0); // when f(a) > 0, then it drops out of the while loop
      myAlphaPos = alpha;
    }
  }
  private void matchWeibull(double mean, Weibull w) {
    myC2vCDF.setRange(0.0, myMaxC2v);
    boolean flag = true;
    do {
      double c2v = myC2vCDF.getValue();
      myWFunction.setC2v(c2v);
      findBracket();
      myZeroFinder.setInterval(myWFunction, myAlphaNeg, myAlphaPos);
      myZeroFinder.setInitialPoint((myAlphaNeg + myAlphaPos) / 2.0);

      myZeroFinder.evaluate();
      double shape = myZeroFinder.getResult();
      double scale = mean / Gamma.gammaFunction(1.0 + 1.0 / shape);
      w.setScale(scale);
      w.setShape(shape);
      if (myZeroFinder.hasConverged()) flag = true;
      else flag = false;
    } while (flag == false);
  }