首页 > 解决方案 > 浮点:FLT_HAS_SUBNORM 为 0 => 出现次正常值 => 未指定的行为?

问题描述

如果FLT_HAS_SUBNORM is 0并且如果在执行 FP 操作(add、mul、div 等)期间出现了次正规值(或者如果将次正规值作为这些 FP 操作的输入),则 FP 引擎的实现(即硬件实现 [FPU ]、SW 实现 [SW FP 库]、HW-SW 混合实现 [使用 HW 指令的 SW FP 库,后跟附加的 SW 后处理])可以:

问题:有人可以提供一个正确的论据(如果通过引用C/IEEE 754标准来加强,则更好)说服该案例的行为确实属于unspecified behavior类别?

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

3.4.4 未指明的行为

行为,是由于使用未指定的值,或本文档提供两种或多种可能性的其他行为,并且在任何情况下都没有对其选择的进一步要求

标签: cfloating-pointieee-754unspecified-behavior

解决方案


回复我自己。

在这种情况下:

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

推荐阅读