浮点数计算与误差

您所在的位置:网站首页 计算机浮点数舍入误差 浮点数计算与误差

浮点数计算与误差

2023-11-27 21:06| 来源: 网络整理| 查看: 265

浮点数运算 前言一、浮点数运算和误差1.例子步骤1.对阶2.尾数相加拼接 总结误差1.截断2.舍入3.(末位)恒置“1”法

前言

本章介绍:浮点数之间的运算

一、浮点数运算和误差 1.例子

浮点数之间的运算首先需要注意的是规格化 在前面有一篇已经介绍了浮点数的规格化 1.看个例子 -65.25+0.75 首先转为二进制并进行规格化 -65.25=》-1000001.01 规格化=》-1.00000101*2^6 s0 =1 e0=127+6=10000101 m0=00000101…0

0.75=》0.11 规格化=》1.1*2^-1 s1=0 e1=127-1=01111110 m1=100000…0

步骤 1.对阶

由于两个数的偏置指数不同,首先将偏置指数统一(一般都是小的置向大的)这里0.75的偏置指数是126而-65.25的指数是133 需要加7也就是e1指数加7变成10000101 根据指数的变化会改变位数的小数点的位置,对于1.1小数点左移7位尾数m1变成0.00000011

2.尾数相加

现在指数相同可以对尾数进行相加,但是我们注意到这里的-65.25是负数所以计算时要将其进行补码运算,看例子

m0=00000101…0 m1=00000011…0 注意这里的s0=1表示是负数将其进行补码运算 但是我们发现这两个数有五个公共的0简化的话就变成了 1101+0011 1101是负数原码》反码1010》补码1011 1011+0011》1110为补码转为原码(-1除符号位取反)》1100 =-3 我们发现这里并没有超出进位(什么叫超出进位呢举个例子就是5-3利用补码进行计算的时候会发现多了一位,超出的这一位如果不丢掉会导致结果错误,简单理解超出一位表示是正数)这里发现没有超出所以是负数,由于原本我么就是利用了s0中的1,这里要把第一个1符号位改成0因为我们在拼接SEM的时候S已经代表了符号位,所以这里算出来就是0100

拼接

根据前面的省略的5个0 拼接起来尾数就变成了000000100 000…补满23位 结果就将SEM拼接 1 10000101 000000100 ==》-1.0000001*2^6=》-64.5

总结

对于浮点数的加减法运算最重要的是对阶,对阶的时候要注意尾数的移位,对阶后对尾数进行运算即可,运算时要注意如果是负数要对其进行补码运算,对尾数运算也可不使用我的方法,也可自己进行十进制转换后进行计算最后再转为二进制,对结果要记得规格化奥!

误差 1.截断

因为浮点数的运算可能会导致尾数位数的增加,因此对于保持尾数位数不变的方法最简单的方法就是截断,截断就是直接丢弃多余的位数

2.舍入

一种对于相对截断更好的方法,就是对于需要舍去的尾数进行判断看看是否大于剩余最低位的一般 举个栗子: 0.111010101(保留五位) 舍去0101 我们发现需要舍去四位,四位最大的数1111=15 我们现在舍去的是0101=5 15/2我们则需要将该数也就是0.11101最低位加一=》0.11110

3.(末位)恒置“1”法

无论右移掉的是1还是0,末位是1还是0,都要将要保留的末位数据恒置1。

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3