c - 浮点: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 后处理])可以:
- 检测此类次正常值并将其设置为零(即
flash-to-zero
策略/逻辑); - 什么都不做[特殊](导致不可预测的输出结果值)。
问题:有人可以提供一个正确的论据(如果通过引用C
/IEEE 754
标准来加强,则更好)说服该案例的行为确实属于unspecified behavior
类别?
注:ISO/IEC 9899:202x (E) 工作草案 — 2020 年 2 月 5 日 N2479:
3.4.4 未指明的行为
行为,是由于使用未指定的值,或本文档提供两种或多种可能性的其他行为,并且在任何情况下都没有对其选择的进一步要求
解决方案
回复我自己。
在这种情况下:
- 该行为并非未指定。
- 行为由 FP 操作的实现定义。因此,行为是实现定义的。
- 由于没有检测和处理次正规数的逻辑(
XXX_HAS_SUBNORM
为0),所以输出结果是不确定的。 - (额外)这种情况应该被视为“用户错误”(和违反
XXX_HAS_SUBNORM is 0
)。
推荐阅读
- python - Pandas 对 DateTime 列的错误排序
- google-chrome-extension - Chrome 扩展电子邮件问题中的 Google Oauth 集成
- c# - 创建新邮件后,RibbonDropDownItems 不可见
- google-apps-script - 使用 Google Apps 脚本插入脚本文件
- c# - C# 有效读取流内容并限制读取量
- node.js - 如何使用 multer 检查上传文件的文件大小
- python - 如何使用pyqt4删除表格小部件中的特定行边框
- javascript - 当我在幻灯片中按下一个 div 时,如何更改另一个 div 的内容?
- header - 如何在 prestashop 中更改标题的名称
- doc2vec - 处理 doc2vec 培训中的附加信息