概述
前言: 计算机在表示一个小数时,一般假定规格化前的数为 P+g 位,P时有效位字长,g是有效位字长之后的的代码长度.
比如说 0.xxxxx|010100 在这里,红的表示P, 绿的表示g,
1. 恒舍法
顾名思义,就是把绿的全部抛弃. 这样处理好处很显然,简单嘛,不管三七二十一,扔了就完了.但是问题也很突出,就是精度有问题.
这种方法误差是最大的,在精度有那么一丢丢要求的地发都会被嫌弃.
2.恒置法
这也顾名思义,就是吧红的最后一位置位1, 这实现起来倒也不难,那精度是不是也有问题呢?咋一看,是的,实际上,非也.
从图中可以看出,误差的积累会互相抵消,除了绿色全为零的情况没人跟他相匹配之外.故而最后的误差只有2^-p,相当小的一个误差了.
3.下舍上入法:
这方法和恒指法不一样的地方,就在于红的部分全取了,但是要不要加,看绿色部分的最高位.如果绿的最高位是1,加,如果是0,那就扔了.这其实也不是特避难,但是麻烦,因为有个特殊情况,如果红色的全是1, 那再加上的最后一位的1,将会使整个数溢出,这时候要再往右规格化,挺麻烦的一件事.
而且吧,如果是0.XXXXX10000,也就是绿的是10000,那么这个东西没有人跟他抵消,产生积累误差.最后的积累误差结果就是2^(-p-1),
这么麻烦的结果,就是能使精度提高一位,误差达到2^(-p-1),比恒置法提高了一个量级.
4.R*舍入法
这个方法是为了改善前面0.XXXXX10000无人跟他匹配导致误差的的情况,方法不难,就是绿的部分是10000的时候,将红的使用恒置法恒置最后一位位1, 这在偶然这种就能是误差积累置为0,但是之后呢,如果算一个数就要判断好几回,这个运算代价是有点高呀,所以方法是好,但是除非对精度要求特别高,不然基本不用的.
5.查表法:
查表法就比较中庸了,他取红色部分的后几位和绿色的全部位数做判断,将各种判读方法存储在存储器中(基本上使用下舍上入的方法),针对不同的应用场景是的积累误差达到要求.
最后
以上就是开放小蝴蝶为你收集整理的浮点数的舍入处理的全部内容,希望文章能够帮你解决浮点数的舍入处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复