# i < x or i != x?

• 03-04-2006
OnionKnight
i < x or i != x?
Which would be the best/fastest way for evaluating the loop condition,
Code:

`while (i < x)`
or
Code:

`while (i != x)`
? Assuming that the loop is incrementing i for each iteration, to avoid elitist remarks :(
• 03-04-2006
SlyMaelstrom
Well assuming you know that i will at some point be exactly x, then there is no difference. But consider any possibility that might result in i never equaling x. Such as this:

Code:

```float i = 0.0; while (i != 1.0) {   printf("%.2f\n", i);   i += .1; }```
• 03-04-2006
OnionKnight
Yes, the value of i will be the same as x's at some point, they are both integers and i is incrementing by one at a time.
• 03-04-2006
moi
Quote:

Originally Posted by OnionKnight
Which would be the best/fastest way for evaluating the loop condition,
Code:

`while (i < x)`
or
Code:

`while (i != x)`
? Assuming that the loop is incrementing i for each iteration, to avoid elitist remarks :(

I'm not an assembly expert, but I know on at least one architecture (ARM) those will both take exactly the same amount of time; cmp and then beq or bge (or bne vs blt); half a dozen in one hand and 6 in the other.

But even if some architectures have one compare go faster than the other, don't give it any thought. Micro-optimization is bad. Forget "fastest" and just concentrate on "best" - whatever makes sense, is easy to understand and maintain. Always go good coding style.
• 03-04-2006
OnionKnight
Yes I usually leave stuff like that up to the compiler but I figured that != would be the same as ! and ==, two operations whereas < would be just one but it seems like they actually do the same amount of work.
I've come to the conclusion that I'll use != in loops where the value will become the other at some point and < otherwise.
• 03-04-2006
Sebastiani
just for fun:

Code:

```int main(void) {         unsigned i, start, stop, first, second, max = UINT_MAX;         i = 0;         start = clock();         while(i < max) i++;         stop = clock();         first = stop - start;         i = 0;         start = clock();         while(i != max) i++;         stop = clock();         second = stop - start;         cout << "(i < max): " << first << endl;         cout << "(i != max): " << second << endl; }```
the first one seems to execute *slightly* faster than the second on my system, but it's negligible. I'd say follow moi's advice. :)