public double getFastValue(double x)
	{
		// Fast check to see if previous index is still valid
		if (storageIndex > -1 && storageIndex < len.length-1 && x > len[storageIndex] && x < len[storageIndex + 1])
		{

		}
		else
		{
			int index = Arrays.binarySearch(len, x);
			if (index > 0)
			{
				return pos1D[index];
			}
			index = - (index + 1) - 1;
			storageIndex = index;
		}
	
		//TODO linear interpolation or extrapolation
		if (storageIndex < 0)
		{
			return pos1D[0];
		}
		double value = x - len[storageIndex];
		return a[storageIndex]
					+ b[storageIndex] * value
					+ c[storageIndex] * (value * value)
					+ d[storageIndex] * (value * value * value);
	}