Open
Description
Currently, the bit_ceil
function is implemented as:
unsigned int bit_ceil(unsigned int n) {
unsigned int x = 1;
while (x < (unsigned int)(n)) x *= 2;
return x;
}
This works correctly, but it uses a loop and can take up to log(n) iterations. It can be rewritten in constant time using standard bit-twiddling techniques, which are generally more efficient and can compile down to ~5 instructions.
Suggested optimized implementation:
unsigned int bit_ceil(unsigned int n) {
if (n == 0) return 1;
n--;
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return n + 1;
}
This implementation:
- Avoids the loop entirely
- Works in constant time for all 32-bit unsigned integers
It would be great to update the function to this version for better performance.
Metadata
Metadata
Assignees
Labels
No labels