-
Notifications
You must be signed in to change notification settings - Fork 12.9k
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
Implement saturating_shl
and saturating_shr
on ints
#103441
Conversation
Hey! It looks like you've submitted a new PR for the library teams! If this PR contains changes to any Examples of
|
(rust-highfive has picked a reviewer for you, use r? to override) |
saturating_shl
and saturating_shr
on ints
While this is useful functionality, the chosen name is very confusing. Generally, a "saturating shift left" is understood in the same sense as a "saturating multiply", which means that (for the unsigned case) the result is |
Thanks for replying! So basically, if the most significant bit is set, the return value is set to |
#[inline(always)] | ||
pub const fn saturating_shr(self, rhs: u32) -> Self { | ||
if rhs >= <$SelfT>::BITS { | ||
0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is 0 the correct value here? Shouldn't it do a sign extend?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, I am already working on an alternative solution with that in mind, but ./x.py test
takes its time this time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe this can just be self >> rhs.min(<$SelfT>::BITS)
as the whole implementation, for both signed and unsigned even.
Considering this initial implementation accidentally saturated the shift value as opposed to the resulting value (and people are similarly confused in the linked issue), it feels like either the function should be renamed to be clearer in its intention, or at least this should be very clearly pointed out in the documentation. |
I don't understand why the doctest fails, but outside its fine. |
7db37a0
to
3ad4b80
Compare
The job Click to see the possible cause of the failure (guessed by this bot)
|
I believe this requires an ACP, so please create one (if you haven't already). @rustbot label +T-libs-api -T-libs +S-waiting-on-author -S-waiting-on-review |
@kellerkindt any updates on this? |
I might look into it this weekend if I find the time :) |
Ping from triage: I'm closing this due to inactivity, Please reopen when you are ready to continue with this. @rustbot label: +S-inactive |
Tracking issue #103440
Implementation based on proposed design by @avitex: https://github.com/avitex/rfcs/blob/master/text/0000-saturating-bit-shifts.md