I noticed this post just now. 

I launched an issue on github about the use of NaN.
https://github.com/JuliaLang/julia/issues/12446

I'd like to learn more about it.




On Monday, August 3, 2015 at 4:33:02 PM UTC+2, Stuart Brorson wrote:
>
> On Sun, 2 Aug 2015, Jeffrey Sarnoff wrote: 
>
> > Quiet NaNs (QNaNs) were introduced into the Floating Point Standard as a 
> > tool for applied numerical work.  That's why there are so many of them 
> > (Float64s have nearly 2^52 of them, Float32s have nearly 2^23 and 
> Float16s 
> > have nearly 2^10 QNaNs).  AFAIK Julia and most other languages use one 
> or 
> > two of each in most circumstances.  Half of the QNaNs are in some sense 
> > positive and the other half negative (their sign bits can be queried, 
> even 
> > though they are not magnitudes).  While QNaNs are unordered by 
> definition, 
> > they each have an embedded *payload:* an embedded integer value that 
> exists 
> > to be set with information of reflective value. And then to carry it, 
> > propagating through the rest of the numerical work so it becomes 
> available 
> > for use by the designer or investigator. 
>
> A logical application for the many different quiet NaNs is to encode 
> different types of meta-numeric value.  Of course, there is the basic 
> NaN, for example 0/0 => NaN.  However using a different payload in the 
> NaN might be used to signal NA (i.e. missing).  One can think of many 
> other fault states which arise in numerical computing with real data, 
> such as "value out of bounds", "invalid value", etc.  All these 
> different states might be encoded using NaNs of different payloads. 
>
> The devil is in the details, however.  For example, the missing value 
> NA propagates differently from the standard NaN.  Consider: 
>
> mean([1 2 NA 4 5]) => 3 
> mean([1 2 NaN 4 5]) => NaN. 
>
> Therefore, the function "mean()" needs to know how to treat the NaN 
> differently from the NA. 
>
> Moreover, I believe that to make use of the different NaN payloads, 
> hardware makers would need to build knowledge of the different NaN 
> types (and propagation rules) into their floating point ALUs.  Is this 
> right? 
>
> One can implement this scheme in software, 
> but the problem is that one needs to match the NaN payload in 
> software, which degrades floating point performance in a big way. 
> Therefore, standardization and hardware support are important. 
>
> My question:  Have any hardware makers ever looked into utilizing the 
> different NaN payloads for the above scheme?  How about 
> standardization bodies? 
>
> Stuart 
>

Reply via email to