我的 SSE-FPU 生成以下 NaN:
- 当我执行任何基本的对偶运算(如 ADDSD、SUBSD、MULSD 或 DIVSD)并且两个操作数之一为 NaN 时,结果具有 NaN 操作数的符号,并且结果尾数的低 51 位将加载NaN 操作数尾数的低 51 位。
- 当两个操作均为 NaN 时,结果将加载目标寄存器的符号,结果尾数的低 51 位将在操作之前加载目标寄存器的低 51 位。因此,当对两个 NaN 操作数进行乘法时,结合律不起作用!
- 当我对 NaN 值执行 SQRTSD 时,结果具有 NaN 操作数的符号,并且结果的低 51 位会加载操作数的低 51 位。
- 当我将无穷大与零或无穷大相乘时,结果总是得到 -NaN (二进制表示形式 0xFFF8000000000000u)。
- 如果任何操作数是信号 NaN,并且未屏蔽异常,则结果将变为安静 NaN。
IEEE-754 标准中是否已确定此行为?
NaN have a sign and a payload,一起称为NaN 中包含的信息.
NaN 的全部要点在于它们是“粘性的”(也许 Monadic 是一个更好的术语?),一旦我们在表达式中包含 NaN,整个表达式就会计算为 NaN。
在评估谓词(如二元关系)时,NaN 也会被特殊对待,例如,如果a
是 NaN,则它不等于其自身。
Point 1
来自 IEEE 754:
诊断信息的传播需要该信息
通过算术运算保留 NaN 中包含的内容
浮点格式转换。
Point 2
来自 IEEE 754:
每个操作都涉及一个或两个输入 NaN,它们都没有信号,
不应发出异常信号,但是,如果要传递浮点结果,
应提供一个安静的 NaN 作为其结果,它应该是输入之一
NaN。
浮点运算从未具有关联性。
我想您正在寻找这个词可交换的但由于结合性需要至少涉及三个操作数。
Point 3
见第4点
Point 4
来自 IEEE 754:
无效的操作是
1. 对信号 NaN 的任何操作 (6.2)
2. 加法或减法 – 无穷大的幅度减法,例如,
(+无穷大) + (-无穷大)
3. 乘法 – 0 × INFINITY
4. 除法 – 0/0 或 INFINITY/INFINITY
5. 余数 – x REM y,其中 y 为零或 x 无穷大
6. 如果操作数小于零则求平方根
7. 将二进制浮点数转换为整数或
当溢出、无穷大或 NaN 排除忠实时的十进制格式
以该格式表示,并且不能以其他方式表示
8. 通过涉及 的谓词进行比较,不带 ?,when
操作数是无序的(5.7,表 4)
Point 5
来自 IEEE 754:
每个涉及信令 NaN 或无效操作 (7.1) 的操作应,如果
没有陷阱发生,如果要传递浮点结果,则传递一个安静的结果
结果为 NaN。
由于其相关性,可以找到 IEEE 754 标准here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)