-
Notifications
You must be signed in to change notification settings - Fork 13k
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
Add range lint for float literals #14519
Conversation
Very nice. I think it would be extra helpful to also print the limit which is exceed. |
It looks pretty ugly for f64:
Is there some formatstring to limit ints and floats to a maximal width, automaically switching to e-Notation (something like |
@hirschenberger Perhaps you’re looking for println!("{:1.3e}", std::f64::MAX_VALUE);
// 1.798e308 This does format |
I know the |
@@ -12,6 +12,9 @@ | |||
|
|||
#![doc(primitive = "f64")] | |||
|
|||
// FIXME: MIN_VALUE and MAX_VALUE literals are parsed as -inf and inf #14353 | |||
#![allow(type_overflow)] |
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.
Can you restrict this to just the statics in question?
I have a new version that also prints the boundary that was exceeded using scientific notation for floats and decimal notation for integers. Do you think it's sensible @alexcrichton ? |
Yes the way it's printed now is ok. |
The Problem is, that the tests are failing. As you can see in the Travis output the lint function displays a positive boundary when the f64 is negative. use std::f32;
use std::f64;
fn main()
{
let o = from_str::<f64>("-1.7976931348623158e+308").unwrap();
if o.is_negative() && o.is_infinite() {
println!("OK {}", o);
}
else {
println!("NOK {}", o);
}
} I have no clue. |
I'm not sure why that test would be failing, but it also looks like you'll need to add back in You could drop the |
Yes I know the failure by successful compilation, I changed it here locally but the test still fails because of the f64 issue I mentioned above. |
I stepped through the debugger and the problem is that |
Closing due to inactivity, but feel free to reopen with a rebase! |
@alexcrichton The floatparsing stuff is blocking this, I'm willing to work on this but I don't know which solution would be accepted. Would a rewrite of the flawed |
I believe fixing the existing code would be the best option. |
In #14353 I suggested some ways to fix the code, can you tell me what's your favourite solution? |
I haven't been able to look too closely at our floating-point parsing code, but I imagine that an uninvasive solution would work pretty well regardless. |
Reopening by request. |
I changed the implementation back to not display the exceeded range due to |
It seems the testvalues where a rounded differently on macs, increased the exceeding values. |
The last build error seems unrelated, can you retry after I rebased? |
I think it can be closed @alexcrichton |
internal: Don't recreate Hygiene unnecessarily
Issue #10934