[release/10.0] Fix UInt128 to double conversion for values >= 2^104#122686
Merged
jeffhandley merged 5 commits intorelease/10.0from Jan 5, 2026
Merged
[release/10.0] Fix UInt128 to double conversion for values >= 2^104#122686jeffhandley merged 5 commits intorelease/10.0from
jeffhandley merged 5 commits intorelease/10.0from
Conversation
- Correctly calculate the sticky bit when converting large UInt128 values (>= 2^104) to double to prevent precision loss. - Optimize the upper bits extraction by accessing _upper directly instead of shifting. - Add regression tests for Int128 to ensure it is also fixed. - Update test comments to better explain the test cases. Fixes #122203
Use decimal literals instead of scientific notation and hex constructors instead of bit shifts for clearer test value representation.
Change threshold check from (value._upper >> 24) to (value._upper >> 40) to correctly handle values up to 2^104 in the intermediate precision branch.
3 tasks
Member
|
CC. @jeffhandley, @artl93 for initial bar check (addition of |
Member
|
We should do math right. Approved from my perspective. This is not a technical review. |
Member
|
Please make sure to have a technical review before submitting to tactics |
jeffhandley
approved these changes
Dec 30, 2025
Contributor
|
Tagging subscribers to this area: @dotnet/area-system-numerics |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backport of #122534 to release/10.0
/cc @tannergooding @sdcb
Customer Impact
#122203 - Customers attempting to convert a
UInt128to a double may see incorrect results for values in the range[2^88, 2^104).Regression
Not a regression,
UInt128was checked in with this bug which was a simple logic error.Testing
Explicit tests and validation covering the scenario were added.
Risk
Low. This is a lesser used type and the bug was a case where a path was covering a lesser range than intended. This was due to it shifting by
24(64 - 40 == 24) when it should've been shifting by40instead (64 - 24 == 40).