【发布时间】:2021-03-14 07:49:35
【问题描述】:
N2479 C17..C2x 工作草案 — 2020 年 2 月 5 日 ISO/IEC 9899:202x (E):
6.3.1.4 实数浮点数和整数:
1 当标准浮点类型的有限值转换为 _Bool 以外的整数类型时,小数部分被丢弃(即,该值被截断为 0)。 如果整数部分的值不能用整数类型表示,则行为未定义。
IEEE 754-2019:
5.8 浮点到整数格式的转换细节:
当一个 NaN 或无限操作数不能以目标格式表示并且不能以其他方式表示时,应发出无效操作异常信号。当数字操作数将转换为目标格式范围之外的整数时,如果无法以其他方式指示这种情况,则应发出无效操作异常的信号。
即C 表示行为未定义,而 IEEE 754 表示应发出无效操作异常。这意味着w.r.t。异常信号在未定义的行为 (C) 中有明确定义的行为 (IEEE 754)。 C和IEEE 754之间是否矛盾?请解释一下。
【问题讨论】:
-
@WeatherVane 第二句涵盖了第二句中的有限值。
-
这真的很简单:IEEE 754 定义了 C 未定义的行为。特定的实现可以定义语言未定义的行为。
-
@LanguageLawyer 谢谢!正是我想要的。
标签: c exception language-lawyer undefined-behavior ieee-754