Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify perfect-square testing loop #2

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

tim-one
Copy link

@tim-one tim-one commented Jul 25, 2018

There's no need for the bits variable here. The number of loop iterations can be cut in half by repeatedly shifting right by 2 so long as the last 2 bits are zeroes. If there were in fact an odd number of trailing zero bits in q0, that will leave tmp with a last bit of 0, and so it won't pass the later (tmp & 7) == 1 test. If there were an even number of trailing zero bits, tmp is left the same as before the change, and again the only real thing left to test is whether (tmp & 7) == 1.

Caution: I didn't test or even compile this code! I was just browsing this on the web, and am using the web UI to edit. I've used the same trick in other projects, and am sure it's sound (give it a little thought - it's obvious ;-) ). Apologies in advance for any typos.

There's no need for the `bits` variable here.  The number of loop iterations can be cut in half by repeatedly shifting right by 2 so long as the last 2 bits are zeroes.  If there were in fact an odd number of trailing zero bits in `q0`, that will leave `tmp` with a last bit of 0,  and so it won't pass the later `(tmp & 7) == 1` test.   If there were an even number of trailing zero bits, `tmp` is left the same as before the change, and again the only real thing left to test is whether `(tmp & 7) == 1`.

Caution:  I didn't test or even compile this code!  I was just browsing this on the web, and am using the web UI to edit.  I've used the same trick in other projects, and am sure it's sound (give it a little thought - it's obvious ;-) ).  Apologies in advance for any typos.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant