public Range GetRange( float percent )
{
int min, max, hits;
int h = (int) ( total * ( percent + ( 1 - percent ) / 2 ) );
int n = values.Length;
int nM1 = n - 1;
// skip left portion
for ( min = 0, hits = total; min < n; min++ )
{
hits -= values[min];
if ( hits < h )
break;
}
// skip right portion
for ( max = nM1, hits = total; max >= 0; max-- )
{
hits -= values[max];
if ( hits < h )
break;
}
// return range between left and right boundaries
return new Range(
( (float) min / nM1 ) * range.Length + range.Min,
( (float) max / nM1 ) * range.Length + range.Min );
}