首页 > 汇编语言 > 浮点数处理与指令编码
阅读:1,372
汇编语言FPU舍入:计算浮点数的精确结果
FPU 尝试从浮点计算中产生非常精确的结果。但是,在很多情况下这是不可能的,因为目标操作数可能无法精确表示计算结果。比如,假设现有一特定存储格式只允许 3 个小数位。那么,该格式可以保存形如 1.011 或 1.101 的数值,而不能保存形如 1.0101 的数值。
若计算的精确结果为 +1.0111 (十进制数 1.4375),那么,既可以通过加 0.0001 向上舍入该数,也可以通过减 0.0001 向下舍入:
1) 舍入到最接近的偶数 (round to nearest even):舍入结果最接近无限精确的结果。如果有两个值近似程度相同,则取偶数值 (LSB=0)。
2) 向 -∞ 舍入 (round down to -∞ ):舍入结果小于或等于无限精确结果。
3) 向 +∞ 舍入 (round down to +∞ ):舍入结果大于或等于无限精确结果。
4) 向 0 舍入 (round toward zero):也被称为截断法,舍入结果的绝对值小于或等于无限精确结果。
舍入到最接近的偶数是默认选择,它被认为是最精确的,也最适合大多数应用程序。下表以二进制数 +1.0111 为例,展示了四种舍入方法。
同样,下表展示了二进制数 -1.0111 的舍入结果。
若计算的精确结果为 +1.0111 (十进制数 1.4375),那么,既可以通过加 0.0001 向上舍入该数,也可以通过减 0.0001 向下舍入:
(a) 1.0111 -> 1.100
(b) 1.0111 -> 1.011
(a) -1.0111 -> -1.100
(b) -1.0111 -> -1.011
1) 舍入到最接近的偶数 (round to nearest even):舍入结果最接近无限精确的结果。如果有两个值近似程度相同,则取偶数值 (LSB=0)。
2) 向 -∞ 舍入 (round down to -∞ ):舍入结果小于或等于无限精确结果。
3) 向 +∞ 舍入 (round down to +∞ ):舍入结果大于或等于无限精确结果。
4) 向 0 舍入 (round toward zero):也被称为截断法,舍入结果的绝对值小于或等于无限精确结果。
FPU 控制字
FPU 控制字用两位指明使用的舍入方法,这两位被称为 RC 字段,字段数值(二进制)如下:- 00:舍入到最接近的偶数(默认)。
- 01:向负无穷舍入。
- 10:向正无穷舍入。
- 11:向 0 舍入(截断)。
舍入到最接近的偶数是默认选择,它被认为是最精确的,也最适合大多数应用程序。下表以二进制数 +1.0111 为例,展示了四种舍入方法。
方法 | 精确结果 | 舍入结果 | 方法 | 精确结果 | 舍入结果 |
---|---|---|---|---|---|
舍入到最接近的偶数 | 1.0111 | 1.100 | 向 +∞ 舍入 | 1.0111 | 1.100 |
向 -∞ 舍入 | 1.0111 | 1.011 | 向 0 舍入 | 1.0111 | 1.011 |
同样,下表展示了二进制数 -1.0111 的舍入结果。