code: @Override
  	public Double getMidpoint() {
  		if (isEmpty())
  			return null;
  
  		// Handle null values
  		if (getStart() == null && getEnd() == null)
  			return 0.0;
  		if (getStart() == null)
  			return getEnd() - OFFSET;
  		if (getEnd() == null)
  			return getStart() + OFFSET;
  
  		// Now we are sure there are no more null values involved
  		if (getStart() == Double.NEGATIVE_INFINITY && getEnd() == Double.POSITIVE_INFINITY)
  			return 0.0;
  		if (getStart() == Double.NEGATIVE_INFINITY)
  			return getEnd() - OFFSET;
  		if (getEnd() == Double.POSITIVE_INFINITY)
  			return getStart() + OFFSET;
  		return getStart() + (getEnd() - getStart())/2;
  	}
docs: Determines the center of the interval.
  <p>
  This is done in a best-effort basis, because in unbounded intervals the center doesn't exist.
  This is different from the class {@link IntegerInterval}, where even unbounded intervals
  are bounded by Integer.MAX_VALUE and/or Integer.MIN_VALUE. In case the DoubleInterval is
  unbounded, the method returns an arbitrary Double, which is within the interval, but makes
  no guarantees as to what value it will have exactly. This ensures that unbounded intervals
  will still work properly with {@link TreeNode}s. The current implementation returns a value,
  which is at a particular {@link #OFFSET} to the bounded point of the interval. However, this
  behaviour may change in the future, so don't rely on it.
  </p>
  
  @return The center of the interval, or an arbitrary point within the interval, if it is
  unbounded.