f*::NAN: guarantee that this is a quiet NaN by RalfJung · Pull Request #139483 · rust-lang/rust (original) (raw)

Conversation

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

[ Show hidden characters]({{ revealButtonHref }})

RalfJung

I think we should guarantee that this is a quiet NaN. This then implies that programs not using f*::from_bits (or unsafe type conversions) are guaranteed to only work with quiet NaNs. It would be awkward if people start to write 0.0 / 0.0 instead of using the constant just because they want to get a guaranteed-quiet NaN.

This is a @rust-lang/libs-api change. The definition of this constant currently is 0.0 / 0.0, which is already guaranteed to be a quiet NaN. So all this does is forward that guarantee to our users.

@rustbot

r? @thomcc

rustbot has assigned @thomcc.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

T-libs

Relevant to the library team, which will review and decide on the PR/issue.

labels

Apr 7, 2025

@m-ou-se m-ou-se added T-libs-api

Relevant to the library API team, which will review and decide on the PR/issue.

needs-fcp

This change is insta-stable, so needs a completed FCP to proceed.

S-waiting-on-fcp

Status: PR is in FCP and is awaiting for FCP to complete.

and removed T-libs

Relevant to the library team, which will review and decide on the PR/issue.

S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

I-libs-api-nominated

Nominated for discussion during a libs-api team meeting.

labels

Apr 7, 2025

@m-ou-se

@rfcbot

Team member @m-ou-se has proposed to merge this. The next step is review by the rest of the tagged team members:

No concerns currently listed.

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

See this document for info about what commands tagged team members can give me.

tbu-

@RalfJung

@RalfJung

@rustbot

The Miri subtree was changed

cc @rust-lang/miri

@rfcbot

🔔 This is now entering its final comment period, as per the review above. 🔔

@bstrie

Is it worth considering the alternative of making no guarantees about f*::NAN, and instead providing f*::QUIET_NAN and f*::SIGNALING_NAN?

@RalfJung

I think adding a SIGNALING_NAN might be worth considering, but I'd say NAN is the better name for QUIET_NAN since it's what you should use most of the time. Signaling NaNs show non-portable behavior much more quickly than quiet NaNs.

@rfcbot

The final comment period, with a disposition to merge, as per the review above, is now complete.

As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed.

This will be merged soon.

tgross35

@tgross35

r? tgross35
@bors r+ rollup

@bors

📌 Commit 0da46d1 has been approved by tgross35

It is now in the queue for this repository.

@bors bors added the S-waiting-on-bors

Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

label

Apr 17, 2025

bors added a commit to rust-lang-ci/rust that referenced this pull request

Apr 17, 2025

@bors

…iaskrgr

Rollup of 8 pull requests

Successful merges:

r? @ghost @rustbot modify labels: rollup

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request

Apr 18, 2025

@rust-timer

Rollup merge of rust-lang#139483 - RalfJung:nan, r=tgross35

f*::NAN: guarantee that this is a quiet NaN

I think we should guarantee that this is a quiet NaN. This then implies that programs not using f*::from_bits (or unsafe type conversions) are guaranteed to only work with quiet NaNs. It would be awkward if people start to write 0.0 / 0.0 instead of using the constant just because they want to get a guaranteed-quiet NaN.

This is a @rust-lang/libs-api change. The definition of this constant currently is 0.0 / 0.0, which is already guaranteed to be a quiet NaN. So all this does is forward that guarantee to our users.

@tgross35

I didn't think of this until just now but we should add a test ensuring the top mantissa bit is set

github-actions bot pushed a commit to model-checking/verify-rust-std that referenced this pull request

Apr 19, 2025

@matthiaskrgr

f*::NAN: guarantee that this is a quiet NaN

I think we should guarantee that this is a quiet NaN. This then implies that programs not using f*::from_bits (or unsafe type conversions) are guaranteed to only work with quiet NaNs. It would be awkward if people start to write 0.0 / 0.0 instead of using the constant just because they want to get a guaranteed-quiet NaN.

This is a @rust-lang/libs-api change. The definition of this constant currently is 0.0 / 0.0, which is already guaranteed to be a quiet NaN. So all this does is forward that guarantee to our users.

@RalfJung

@tgross35 what's the best way to get the top mantissa bit for our various float types?

@tgross35

I think x.to_bits() & (1 << (F::MANTISSA_DIGITS - 2)) != 0 should work

ChrisDenton added a commit to ChrisDenton/rust that referenced this pull request

Apr 22, 2025

@ChrisDenton

test_nan: ensure the NAN contant is quiet

Follow-up to rust-lang#139483

r? @tgross35

ChrisDenton added a commit to ChrisDenton/rust that referenced this pull request

Apr 22, 2025

@ChrisDenton

test_nan: ensure the NAN contant is quiet

Follow-up to rust-lang#139483

r? @tgross35

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request

Apr 23, 2025

@rust-timer

github-actions bot pushed a commit to rust-lang/miri that referenced this pull request

Apr 23, 2025

@ChrisDenton

github-actions bot pushed a commit to model-checking/verify-rust-std that referenced this pull request

Apr 24, 2025

@ChrisDenton

test_nan: ensure the NAN contant is quiet

Follow-up to rust-lang#139483

r? @tgross35

Labels

disposition-merge

This issue / PR is in PFCP or FCP with a disposition to merge it.

finished-final-comment-period

The final comment period is finished for this PR / Issue.

needs-fcp

This change is insta-stable, so needs a completed FCP to proceed.

S-waiting-on-bors

Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

S-waiting-on-fcp

Status: PR is in FCP and is awaiting for FCP to complete.

T-libs-api

Relevant to the library API team, which will review and decide on the PR/issue.