浮点数的运算
2017-10-16 20:05
253 查看
规格化的浮点数因为存储是使用类似科学计数法的表示,因此计算方法大体上与科学计数法较为类似。
对于二进制形式的两个浮点数相加
1. 对阶:对于两个规格化浮点数,将较小的指数的数向较大指数的数对齐。通过移动小数点实现。如果出现有效数字位数不能满足的情况,进行近似。
2. 相加尾数(有效数):将两个二进制数的尾数相加。
3. 规格化处理:对已经求得的结果进行规格化处理。即移动小数点位数,使之满足规格化的形式。
4. 按照有效数字位数进行舍入处理。
5. 判断是否出现溢出。
对于浮点数(−1)s(1+M)×2e溢出有几种情况:
(1)阶码上溢:e>128,将其处理为正负无穷。
(2)阶码下溢:e<−127,将其处理为0;
(3)尾数上溢:M>1,需要右移尾数1位且将e=e+1;
(4)尾数下溢:尾数右移过程中,最低有效位超出表示的范围,需要进行舍入处理。
例如计算0.510×(−0.437510),设有效位数为4(由−0.4375决定)。
0.510=12×2−1
−0.437510=−1.1102×22
阶码相加可得E=−3
尾数相乘可得1.1100002
不需要再进行规格化,截取4位1.110也无须舍入。
同时符号位为负,因此结果为−1.1102×2−3。
浮点加减法
浮点加减法的一般步骤(减法本质也是加法):对于二进制形式的两个浮点数相加
1. 对阶:对于两个规格化浮点数,将较小的指数的数向较大指数的数对齐。通过移动小数点实现。如果出现有效数字位数不能满足的情况,进行近似。
2. 相加尾数(有效数):将两个二进制数的尾数相加。
3. 规格化处理:对已经求得的结果进行规格化处理。即移动小数点位数,使之满足规格化的形式。
4. 按照有效数字位数进行舍入处理。
5. 判断是否出现溢出。
对于浮点数(−1)s(1+M)×2e溢出有几种情况:
(1)阶码上溢:e>128,将其处理为正负无穷。
(2)阶码下溢:e<−127,将其处理为0;
(3)尾数上溢:M>1,需要右移尾数1位且将e=e+1;
(4)尾数下溢:尾数右移过程中,最低有效位超出表示的范围,需要进行舍入处理。
浮点乘法
浮点数的乘除法较为简单,只需要尾数相乘,阶码(指数)相加,然后进行规格化处理和舍入就可以了。例如计算0.510×(−0.437510),设有效位数为4(由−0.4375决定)。
0.510=12×2−1
−0.437510=−1.1102×22
阶码相加可得E=−3
尾数相乘可得1.1100002
不需要再进行规格化,截取4位1.110也无须舍入。
同时符号位为负,因此结果为−1.1102×2−3。
算术精确性
IEEE754标准保证在进行舍入之前,在右边总是多保留两位。分别称之为保护位(guard)和舍入位(round)。使用保护位和舍入位能够提供更精确的舍入。相关文章推荐
- linux shell 实现 四则运算(整数及浮点) 简单方法
- 不利用浮点运算,在屏幕上画一个圆 (x**2 + y**2 = r**2,其中 r 为正整数)
- linux命令之目录监控 字符串拆分 监控命令运行结果 统计行数 去除文本头尾空格 获取网卡名浮点数运算等命令使用技巧
- Java简单类型进行精确浮点数运算
- js浮点运算精度丢失的解决办法
- ARM上的浮点运算
- R在浮点运算中的精度问题
- 浮点运算简介
- Shell脚本浮点运算
- C++实现支持浮点(x.x)的四则运算(带括号)
- 在bash脚本中进行浮点运算
- 关于不能够精确的对浮点数进行运算的问题
- 浮点运算简介
- Vdsp(bf561)中的浮点运算(3):FLT_MIN
- Linux系统下用C语言实现浮点数四则运算表达式的求值
- JAVA的浮点运算精度问题的解决
- Vdsp(bf561)中的浮点运算(12):fract16加减运算
- 深入理解计算机系统(2.7)------浮点数舍入以及运算
- 定点数、浮点数类型运算的说明
- Faster rcnn test浮点运算次数(卷积实现过程,Faster rcnn总体结构和参数)