docs: public void setValue(double value) {
  		if(!expectingValue) {
  			throw new RuntimeException("Call to setValue() perfomed without prior getNextPoint() call (e.g. call performed twice).");
  		}
  
  		if (numberOfIterations < 3) {
  			/**
  			 * Initially fill values
  			 */
  			values[numberOfIterations] = value;
  
  			if (numberOfIterations < 2) {
  				nextPoint = points[numberOfIterations + 1];
  			} else {
  				if (points[1] - points[0] > points[2] - points[1]) {
  					nextPoint = getGoldenSection(points[0], points[1]);
  				} else {
  					nextPoint = getGoldenSection(points[1], points[2]);
  				}
  			}
  		}
  		else {
  			/**
  			 * Golden section search update rule
  			 */
  
  			if (points[1] - points[0] > points[2] - points[1]) {
  				// The left interval is the large one
  				if (value < values[1]) {
  					/*
  					 * Throw away right point
  					 */
  					points[2] = points[1];
  					values[2] = values[1];
  
  					points[1] = nextPoint;
  					values[1] = value;
  				} else {
  					/*
  					 * Throw away left point
  					 */
  					points[0] = nextPoint;
  					values[0] = value;
  				}
  			} else {
  				// The right interval is the large one
  				if (value < values[1]) {
  					/*
  					 * Throw away left point
  					 */
  					points[0] = points[1];
  					values[0] = values[1];
  
  					points[1] = nextPoint;
  					values[1] = value;
  				} else {
  					/*
  					 * Throw away right point
  					 */
  					points[2] = nextPoint;
  					values[2] = value;
  				}
  			}
  
  			/*
  			 * Update next point to ask value for (create point in larger interval)
  			 */
  			if (points[1] - points[0] > points[2] - points[1]) {
  				nextPoint = getGoldenSection(points[0], points[1]);
  			} else {
  				nextPoint = getGoldenSection(points[1], points[2]);
  			}
  
  			/*
  			 * Save belt: check if still improve or if we have reached machine accuracy
  			 */
  			if(points[2]-points[0] >= accuracy) {
  				isDone = true;
  			}
  			accuracy = points[2]-points[0];
  		}
  
  		numberOfIterations++;
  		expectingValue = false;
  	}