On Thursday, 15 August 2013 at 04:01:28 UTC, bsd wrote:
Hi all,
I think this is a bug, but if not I'm very confused and would
like some clarification.
When checking double values that could be nan or unassigned I
have to check both double.init and double.nan. But double.init
IS double.nan.
---
void main() {
// passes but I believe it is checked during compile
assert(double.init is double.nan);
double val;
std.stdio.writeln( to!string(val) ); // writes "nan" to
console
assert(val is double.init); // passes
assert(val is double.nan); // << FAILS (unexpectedly for me
anyway)
}
---
Why does assert(val is double.nan) fail? Given:
a) double.init is double.nan
b) val is double.init
c) to!string(val) sees val as a nan
I also found this confusing:
---
void main() {
assert(double.init is double.nan); // passes expected
assert(double.init is float.init); // passes, unexpected
assert(double.init is real.init); // passes, unexpected
assert(double.init is real.nan); // passes, unexpected
assert(double.init is float.nan); // passes, unexpected
}
---
I don't think these should be passing...should they??
I'm on fedora 19, dmd 2.063.2 extracted from the ZIP
Thanks
There is the issue with order on is. Try reversing them and see
if you get the same results. I imagine for floats and doubles are
interchangeable for nans(both are nan, regardless of the encoding
used).