private void FindLowerUpperInPattern(out int lowerIndex, out int upperIndex, List<double> pattern, double value)
{
lowerIndex = 0;
upperIndex = 0;
if (value <= pattern.First())
{
lowerIndex = 0;
upperIndex = 0;
return;
}
if (value >= pattern.Last())
{
lowerIndex = pattern.Count - 1;
upperIndex = pattern.Count - 1;
return;
}
// bisection search to find correct position in power pattern
int middleIndex = (pattern.Count - 1) / 2;
upperIndex = pattern.Count - 1;
lowerIndex = 0;
while (upperIndex - lowerIndex > 1)
{
if (pattern[middleIndex] == value)
{
lowerIndex = middleIndex;
upperIndex = middleIndex;
return;
}
else if (pattern[middleIndex] < value)
{
lowerIndex = middleIndex;
middleIndex = (upperIndex - lowerIndex) / 2 + lowerIndex;
}
else
{
upperIndex = middleIndex;
middleIndex = (upperIndex - lowerIndex) / 2 + lowerIndex;
}
}
if (pattern[lowerIndex] <= value && value < pattern[upperIndex])
{
return;
}
}
#endregion