Witam,
Proszę o pokierowanie mnie co można jeszcze zoptymalizować w tej metodzie, ja już głupieje trochę, bo nie widzę żadnych lepszych opcji. Pomoże ktoś? Tu wklejam kawałek kodu:
Number SimplestBetween(Number left, Number right)
{
if (left == null && right == null)
return new Number(0, 1);
if (left == null)
{
if (right.value > 0)
return new Number(0, 1);
else
return new Number((int)right.value - 1, 1);
}
if (right == null)
{
if (left.value < 0)
return new Number(0, 1);
else
return new Number((int)left.value + 1, 1);
}
if (left.value < 0 && right.value > 0)
{
new Number(0, 1); // jeżeli 0 jest dostępne to je wybiera
}
if (Math.Abs(left.value - right.value) > 1.0)
{
// wartość zwraca w postaci Integer'a
if (right.value <= 0)
return new Number((int)right.value - 1, 1);
if (left.value >= 0)
return new Number((int)left.value + 1, 1);
}
else
{
int currentAdding = 0; // przelicza najprostszą funkcję pomiędzy lewym a prawym
int currentSubtracting = 1;
int direction = 1;
if (right.value <= 0)
direction = -1;
Number currentNumber = new Number(currentAdding, currentSubtracting);
while (currentNumber.value >= right.value || currentNumber.value <= left.value)
{
currentAdding = 0;
currentSubtracting *= 2;
currentNumber = new Number(currentAdding, currentSubtracting);
int target = 0;
if (currentNumber.value >= right.value)
target = -1;
if (currentNumber.value <= left.value)
target = 1;
while (target == direction)
{
currentAdding += direction;
currentNumber = new Number(currentAdding, currentSubtracting);
target = 0;
if (currentNumber.value >= right.value)
target = -1;
if (currentNumber.value <= left.value)
target = 1;
}
}
return currentNumber;
}
throw new ArgumentException("Unable to find a number between: " + left + " and " + right);
}