Three floating point questions
Don
nospam at nospam.com
Thu Aug 26 00:16:50 PDT 2010
bearophile wrote:
> Don:
>>> Do you know what cast(ulong) is doing here?
>> Turning it from a signalling nan to a quiet nan.
>
> I really really didn't know this. Is this written somewhere in the D docs? :-)
It's the way signalling nans work. _Any_ use of them raises a floating
point exception, then turns them into a quiet NaN.
>> You mean, because it's a negative nan?
>
> Yes, I mean that. Is a negative nan a meaningful concept?
It's part of the payload of the nan.
Is it a true negative nan coming from the division of two positive
values, or it's just a bug of writeln, or is it something completely
different?
>
>
>> The signalling nans get triggered in the 'double x; ' line.
>
> (You are often two steps forward compared to my thought patterns, so please be patient with me)
> In this program the FP register is modified after that definition line, so I don't expect 'double x; ' to trigger an hardware exception.
Unfortunately the way the backend deals with it at present is to do:
double x;
x = double.init;
which is wrong because it involves an assignment, which may or may not
trigger a floating point exception, depending on your cpu*.
If it triggers one, then x contains a quiet nan, instead of a signalling
one! So the signalling nan idea doesn't quite work yet.
* it actually is documented in Intel/AMD docs for the FLD and FSTP
instructions, but you have to read it _very_ carefully to notice. As far
as I can tell, nobody has noticed the difference before. I only
discovered it through experiment.
More information about the Digitalmars-d-learn
mailing list