问题描述
注意:了解 IEEE 754。请耐心等待。
IEEE 标准 754-2019:
5.4.1 算术运算
― formatOf-convertFromInt(int)
― intFormatOf-convertToIntegerXXX(source)
问题:为什么将 convertFromInt
和 convertToIntegerXXX
归类为算术运算而不是转换运算?
更新。问题原因:
C11(强调):
5.2.4.2.2 浮动类型的特征
3 安静的 NaN 几乎可以传播到每个 _arithmetic 操作中而不会引发浮点异常;当作为算术操作数发生时,信号 NaN 通常会引发浮点异常。
根据 IEEE 754(2008 年和 2019 年)convertFromInt
和 convertToIntegerXXX
被归类为算术运算而不是转换运算。 >
根据 C11(强调):
F.4 浮点数到整数的转换
1 ... 否则,如果浮点数为无穷大或NaN或者浮点数的整数部分超出整数类型的范围,则''invalid' ' 引发浮点异常,结果值未指定。 ...
这里的 NaN 不是特化的,因此我们得出结论,这里的 NaN 是 any NaN。
还有 C11(强调):
F.3 运算符和函数
但是,根据 IEEE 754(2008 年和 2019 年)convertFromInt
和 convertToIntegerXXX
被归类为算术运算而不是转换运算。
总的来说:我很困惑。我看到了 C11 和 IEEE 754 之间的矛盾。
代码示例:
l = (long)NAN; // shall lead to raising of FE_INVALID ??
这里:
- IEEE 754 说:
convertToIntegerXXX
被归类为算术运算 AND C11 说:安静的 NaN 几乎在所有算术运算中传播,而不会引发浮点异常 . - C11 说:如果浮点值是无穷大或 NaN 或者浮点值的整数部分超出整数类型的范围,则引发“无效”浮点异常`。
核心问题:l = (long)NAN
会导致 FE_INVALID
的提高吗?
额外问题:IEEE 754:convertFromInt
和 convertToIntegerXXX
是否被错误地归类为算术运算,而不是归类为转换运算? >
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)