Re: Getting rid of "if condition" by some math equation.
Sanny wrote:
Or even (to micro-optimize a bit :) ):
long xx = 0, bit = 1 << 50;
for (int i = 0; i <= 50; i++)
{
if (Str.charAt(i) != '-')
{
xx |= bit;
}
bit = bit >> 1;
}
You are correct. I removed the above for loop to increase performance
as
for (int i = 0; i <= 50; i++) here "i<=50" if condition is executed So
there are 2 if condition per loop.
By removing the for loop I avoided one if condition.
Now, I am looking for some way to use single equation/ Algebric may be
to remove all if conditions.
I find if conditions take 5-10 times longer than simple arithmetic
works.
The time for an if condition is highly variable. It can be practically
nothing or very expensive, depending on whether the processor guesses
correctly in deciding between fetching the instructions following the
branch or the branch target. Branch predictors are designed and tested
to deal well with sort of pattern that shows up with a simple for-loop.
Meanwhile, your hand unrolling may be making it harder for the JVM to
optimize the call to charAt. It sees 50 calls each with 1/50 of the real
call frequency.
I would stick with the more normal form of the code until you are
completely happy with the algorithm, and keep it at least as comments
even if you do find you need to do micro-optimizations such as hand
unrolling.
Patricia