Aussie AI
Example: Highest Integer Power-of-Two
-
Book Excerpt from "Generative AI in C++"
-
by David Spuler, Ph.D.
Example: Highest Integer Power-of-Two
Another simple trick related to the log2 calculation
is to truncate a number to its largest power-of-2.
This is equivalent to the value of its leftmost bit in binary representation.
For example, 8 (binary 1000) stays as 8, because it's 2^3, but 7 (binary 111) reduces down to 4 (binary 100), which is 2^2.
As with the truncated integer log2 calculation, this method focuses on computing the leftmost 1 bit,
which is known as the Most-Significant Bit (MSB).
Whereas the log2 calculation found the index position of that MSB, this power-of-two calculation requires the value of the MSB.
In other words, we need to find the bit that is the MSB, and then keep only that bit.
A simple way to do this is to compute the log2 of the integer efficiently, and then left-shift a 1 by that many places (using unsigned type).
The basic idea is:
int bitoffset = log2_integer_fast(i); int highestpowerof2 = 1u << bitoffset;
Note that this doesn't handle cases like zero, so it still needs a bit of extra code polishing work.
|
• Next: • Up: Table of Contents |
|
The new AI programming book by Aussie AI co-founders:
Get your copy from Amazon: Generative AI in C++ |