$x & 1 will probably have to convert the double-precision floating point value stored in $x into a "long int" before it can do the fast bit-wise "and". This conversion may well take longer than the simple floating-point division (which will have the aid of floating-point acceleration hardware) that $x % 2 must do.
This probably explains some of the benchmark results.
To me, a much worse problem than the misguided "optimization" of such a simple operation is that $x & 1 will only work for integral values that fit within 32 bits (on most platforms). However, $x % 2 will work correctly on integeral values of approximately 57 bits (on most platforms). Using % 2 will probably make your code handle a much huger range of values correctly.
- tye (but my friends call me "Tye")In reply to (tye)Re: Testing a number for oddness
by tye
in thread Testing a number for oddness
by Falkkin
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |