On Thursday, 28 August 2014 at 14:43:30 UTC, Don wrote:
No. Once you load an SNAN, it isn't an SNAN any more! It is a QNAN.

By which definition? It is only if you consume the SNAN with an fp-exception-free arithmetic op that it should be turned into a QNAN. If you compute with an op that throws then it should throw an exception.

MOV should not be viewed as a computation…

It also makes sense to save SNAN to file when converting corrupted data-files. SNAN could then mean "corrupted" and QNAN could mean "absent". You should not get an exception for loading a file. You should get an exception if you start computing on the SNAN in the file.

You cannot have an SNAN in a floating-point register (unless you do a nasty hack to pass it in). It gets converted during loading.

I don't understand this position. If you cannot load SNAN then why does SSE handle SNAN in arithmetic ops and compares?

const float x = snan;
x = x;

// x is now a qnan.

I disagree (and why const?)

Assignment does nothing, it should not consume the SNAN. Assignment is just "naming". It is not "computing".

Reply via email to