Filing since it's in pFCP over at #70887 (comment), and I don't think we can reasonably change it after stabilization (especially since it's documented).
Currently, 0.ilog2() in release mode evaluates to 0. (And same for the other bases.)
It's not obvious to me that that's necessarily the best option. For example, the (BITS-1) - LeadingZeros implementation is slightly nicer on CPUs from the past decade or so https://rust.godbolt.org/z/3q6WME84Y (and I think would be just as nice on older ones if LLVM was a bit smarter), but gives -1as u32 in the wrapping case.
It also might be nice to have the wrapping case give something clearly different from any of the successful cases, rather than having 1.ilog2() and 0.ilog2() give the same thing. For example u32::MAX.next_power_of_two() returns 0 in release mode, which isn't a power of two (according to is_power_of_two), so it's distinguishable from all the non-wrapping cases.
This only affects ilog/ilog2/ilog10 on uNN. (The checked versions don't have an issue, nor do the ones on NonZeroUNN.)
Filing since it's in pFCP over at #70887 (comment), and I don't think we can reasonably change it after stabilization (especially since it's documented).
Currently,
0.ilog2()in release mode evaluates to0. (And same for the other bases.)It's not obvious to me that that's necessarily the best option. For example, the
(BITS-1) - LeadingZerosimplementation is slightly nicer on CPUs from the past decade or so https://rust.godbolt.org/z/3q6WME84Y (and I think would be just as nice on older ones if LLVM was a bit smarter), but gives-1as u32 in the wrapping case.It also might be nice to have the wrapping case give something clearly different from any of the successful cases, rather than having
1.ilog2()and0.ilog2()give the same thing. For exampleu32::MAX.next_power_of_two()returns0in release mode, which isn't a power of two (according tois_power_of_two), so it's distinguishable from all the non-wrapping cases.This only affects
ilog/ilog2/ilog10onuNN. (The checked versions don't have an issue, nor do the ones onNonZeroUNN.)