我想执行浮点单精度加法运算,其中
A = +无穷大(7F800000) B = - 无穷大(FF800000)
结果(A + B)是+ NAN还是-NAN?
另一个相关问题:
如果NAN通过算术运算传播,我们得到qNAN。 而sNAN表示无效的异常操作。 因此,上述操作将导致sNAN。 我的理解是否正确?
答案 0 :(得分:5)
IEEE 754标准未指定在应用产生NaN的操作时获得的NaN表示。唯一的建议,并不总是遵循,如果结果是NaN,因为至少有一个操作数是,那么结果应该与NaN操作数之一具有相同的表示。
从非NaN操作数生成NaN可能是中断控制流的机会(例如,使用陷阱),具体取决于系统的设置方式。如果主机系统没有设置为立即中断控制流程,则生成的NaN是一个安静的NaN。
信令NaN对于填充应被视为未初始化的内存非常有用:这会导致立即异常,而不是传播NaN值。返回信令NaN的算术运算是没有意义的,因为异常的原因是当前操作(它向NaN发出信号,而NaN依次被忽略或根据系统的设置进行操作)。返回信令NaN将使其看起来好像下一个操作是异常的原因。
NaN拥有自己的Wikipedia page,其中包含大量信息。