docs: protected void addPoint(double time, RandomVariable value, boolean isParameter) {
  		synchronized (rationalFunctionInterpolationLazyInitLock) {
  			if(interpolationEntity == InterpolationEntity.LOG_OF_VALUE_PER_TIME && time == 0) {
  				boolean containsOne = false; int index=0;
  				for(int i = 0; i< value.size(); i++){if(value.get(i)==1.0) {containsOne = true; index=i; break;}}
  				if(containsOne && isParameter == false) {
  					return;
  				} else {
  					throw new IllegalArgumentException("The interpolation method LOG_OF_VALUE_PER_TIME does not allow to add a value at time = 0 other than 1.0 (received 1 at index" + index + ").");
  				}
  			}
  
  			RandomVariable interpolationEntityValue = interpolationEntityFromValue(value, time);
  
  			int index = getTimeIndex(time);
  			if(index >= 0) {
  				if(points.get(index).value == interpolationEntityValue) {
  					return;			// Already in list
  				} else if(isParameter) {
  					return;
  				} else {
  					throw new RuntimeException("Trying to add a value for a time for which another value already exists.");
  				}
  			}
  			else {
  				// Insert the new point, retain ordering.
  				Point point = new Point(time, interpolationEntityValue, isParameter);
  				points.add(-index-1, point);
  
  				if(isParameter) {
  					// Add this point also to the list of parameters
  					int parameterIndex = getParameterIndex(time);
  					if(parameterIndex >= 0) {
  						new RuntimeException("CurveFromInterpolationPoints inconsistent.");
  					}
  					pointsBeingParameters.add(-parameterIndex-1, point);
  				}
  			}
  			rationalFunctionInterpolation = null;
  			curveCacheReference = null;
  		}
  	}