首页 > 汇编语言 > 浮点数处理与指令编码
汇编语言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 的舍入结果。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算