C2x草案F.3条款5个FE_宏对应4个IEEE754舍入属性是否为笔误?
该条款确实属于N2479(2020年2月C2x工作草案)的编辑笔误,已在正式发布的C23标准(ISO/IEC 9899:2024)中修正。
原草案的问题点
原N2479草案F.3 Operations第9条原文如下:
7.6节定义的FE_DOWNWARD、FE_TONEAREST、FE_TONEARESTFROMZERO、FE_TOWARDZERO、FE_UPWARD宏,可与fegetround、fesetround函数及FENV_ROUND编译指示配合使用,分别代表IEC 60559舍入方向属性roundTowardNegative、roundTiesToEven、roundTowardZero、roundTowardPositive。二进制浮点运算的roundTiesToAway属性及对应的FE_TONEARESTFROMZERO宏为可选支持。
该表述存在明显的逻辑矛盾:第一句列出了5个FE_前缀的宏,但后续仅对应4个IEC 60559属性,FE_TONEARESTFROMZERO没有对应的属性项,不符合"分别"所代表的一一对应关系,属于草案阶段的疏漏。
正式C23标准的修正表述
正式发布的C23标准将该条款第一句中多余的FE_TONEARESTFROMZERO删除,修正后内容为:
7.6节定义的
FE_DOWNWARD、FE_TONEAREST、FE_TOWARDZERO、FE_UPWARD宏,可与fegetround、fesetround函数及FENV_ROUND编译指示配合使用,分别代表IEC 60559舍入方向属性roundTowardNegative、roundTiesToEven、roundTowardZero、roundTowardPositive。二进制浮点运算的roundTiesToAway属性及对应的FE_TONEARESTFROMZERO宏为可选支持。
修正后的表述逻辑通顺,4个必选宏与4个必选IEC 60559属性一一对应,可选的FE_TONEARESTFROMZERO单独在第二句说明,对应roundTiesToAway属性。
最终正确的对应关系
FE_DOWNWARD→ roundTowardNegative(必选支持)FE_TONEAREST→ roundTiesToEven(必选支持)FE_TOWARDZERO→ roundTowardZero(必选支持)FE_UPWARD→ roundTowardPositive(必选支持)FE_TONEARESTFROMZERO→ roundTiesToAway(可选支持)
内容的提问来源于stack exchange,提问作者pmor

