浮点数:FLT_HAS_SUBNORM为0 =>出现异常值=>未指定行为?

问题描述

如果@Embedded并且在执行FP操作(加,乘,除等)期间出现次标准值(或者如果将这些次标准值作为这些FP操作的输入给出),则FP引擎的实现(即HW实现[FPU],SW实现[SW FP库],HW-SW混合实现[使用HW指令并进行附加SW后处理的SW FP库])可以:

  • 检测此类次标准值并将其设置为零(即@Embedded策略/逻辑);
  • 不执行任何特殊操作(导致无法预测的输出结果值)。

问题:有人可以提供正确的论据(如果通过引用FLT_HAS_SUBnorM is 0 / flash-to-zero标准来更好地证明这种情况的行为确实属于C类? >

注意:ISO / IEC 9899:202x(E)工作草案-2020年2月5日N2479:

3.4.4 未指明的行为

行为,这是由于使用了未指定的值或本文档提供两种或两种以上可能性的其他行为所致,并且在任何情况下都不会对所选择的行为施加任何其他要求

解决方法

回复自己。

在这种情况下:

  1. 行为未明确
  2. 该行为由FP操作的实现定义。因此,行为是实现定义的
  3. 由于缺少用于检测和处理次正规数的逻辑(Itr为0),因此输出结果为不确定
  4. (额外)这种情况应被视为“用户错误”(并且违反了XXX_HAS_SUBNORM)。