Canonicalize NaNs when casting between float and double#8645
Open
stevenfontanella wants to merge 1 commit intomainfrom
Open
Canonicalize NaNs when casting between float and double#8645stevenfontanella wants to merge 1 commit intomainfrom
stevenfontanella wants to merge 1 commit intomainfrom
Conversation
Member
Author
|
@rathann, would you be able to try to repro your test from this branch? I'm not aware of a good way to run this architecture myself locally. |
Contributor
|
Thanks for the PR. I'll try to test it over the weekend. |
tlively
approved these changes
Apr 23, 2026
Member
tlively
left a comment
There was a problem hiding this comment.
LGTM if this fixes the problem
Member
Author
|
Thanks! I'll wait for the test to confirm. |
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #8626. Also part of #8261.
The bug is due to the fact that C++ doesn't guarantee a bitwise representation for NaNs that are casted from double -> float or vice versa. From https://en.cppreference.com/cpp/language/implicit_conversion:
In the case of NaNs, the value (NaN) is preserved regardless of the particular NaN that is picked, so we have no guarantee of the bitwise representation. And for double -> float:
I assume NaN conversions again fall under case 1 meaning that the "value" (NaN) is preserved but not the bitwise representation.
Canonicalize NaNs after promotion or demotion to ensure that the quiet bit remains set.