automatic NaN propogation detection?

Chris Katko ckatko at gmail.com
Sat Sep 25 07:53:11 UTC 2021


Is there any automatic compiler-based or library methods for 
detecting NaNs? I mean, if the compiler is outputting code that 
it knows is going to be set in memory to NaN, why isn't it giving 
me at least a compiler warning? Is that some sort of "NP 
complete" can't-fix issue or something?

I mean, I can pass NaN to std.math.round() and it doesn't fire 
off an exception or anything. It compiles fine even though it's 
impossible-as-compiled to be correct. (Unless my absurd intention 
was to find the rounded value of NaN.) Instead, I'm stuck finding 
out where the NaN started, from a trail of destruction of values 
destroyed by NaN propogation. Why not stop it at its source?

Even dscanner won't flag this code!

```d
import std.stdio;
import std.math;

int main()
	{
	float x;
	writeln(x);
	writeln(round(x));
	return 0;
	}
```



More information about the Digitalmars-d-learn mailing list