lev*_*tov 40 floating-point nan ieee-754
似乎IEEE 754标准将16,777,214个32位浮点值定义为NaN,或所有可能值的0.4%.
我想知道保留这么多有用值的理由是什么,而基本上只需要2个:一个用于信令,一个用于安静的NaN.
对不起,如果这个问题很简单,我在互联网上找不到任何解释.
Rob*_*vey 25
IEEE-754标准将NaN定义为指数中所有1的数字,以及非零有效数.有效数字中的最高位指定NaN是信令还是安静信号.有效数的剩余比特形成所谓的NaN 的有效载荷.
每当操作的一个操作数是NaN时,结果是NaN,并且结果的有效载荷等于NaN操作数之一的有效载荷.有效负载保存对于科学计算的效率很重要,并且至少有一家公司已经提议将NaN有效负载用于专有用途.
在更基本的术语中,NaN不携带任何有用的数字信息,并且无论如何必须保留整个32位,因此如果标准中没有定义有效载荷,则有效数据中未使用的位将被浪费.
根据IEEE-754格式的设计者William Kahan的系列说明,使用多个NaN旨在让硬件首先填充有关触发NaN的信息,以便最终进行计算导致NaN可能运行完毕,然后允许程序员编写代码来分析出了什么问题:
IEEE 754的NaN规范赋予它一个位域,软件可以在其中记录例如NaN的产生方式和/或位置。该信息对于故障计算的后续“追溯诊断”将非常有帮助,但是现在没有软件可以使用它。通常,该字段已从操作数NaN复制到每个算术运算的结果NaN,或者在通过未捕获的INVALID运算创建新的NaN时用二进制1000 ... 000填充。由于缺乏可利用它的软件,这种习俗一直在萎缩。
因此,这似乎是有意的并且未指定,因此不同的系统可以处理不同的事情。回想起来,这似乎从未真正发生过,但似乎是一个合理的主意!