IEEE754标准中的4种舍入模式


一、IEEE754标准中的4种舍入模式

1.就近舍入(向偶数舍入):即十进制下的“四舍五入”
(1)例如有效数字超出规定数位的多余数字是1001,它大于超出规定最低位的一半(即0.5),故最低位进1;
(2)如果多余数字是0111,它小于最低位的一半,则舍掉多余数字(截断尾数、截尾)即可;
(3)对于多余数字是1000、正好是最低位一半的特殊情况,最低位为0则舍掉多余位,最低位为1则进位1、使得最低位仍为0(偶数)。

2.朝0舍入(正数向下舍入、负数向上舍入):即朝数轴零点方向舍入,即直接截尾。

3.朝正无穷舍入(向上舍入):对正数而言,只要多余位不全为0则向最低有效位进1;负数则直接截尾。

4.朝负无穷舍入(向下舍入):对负数而言,向最低有效位进1;正数若多余位不全部为0则简单截尾。
此处加入数轴,便于理解
在这里插入图片描述

二、举例说明

1.就近舍入Round to nearest (even)

Rounded result is the closest to the infinitely precise result. If two values are equally close, the result is the even value (that is, the one with the least-significant bit of zero).
四舍五入的结果是最接近无限精确的结果。如果两个值相等,则结果为偶数(即最低有效位为0的那个值)。

对于1.001_1001,舍入处理后为1.010(去掉多余的4位,加0.001)
对于1.001_0111,舍入处理后为1.001(去掉多余的4位)
对于-1.001_1000,舍入处理后为-1.010(去掉多余的4位,加0.001,因为此时最低位为1)
对于-1.010_1000,舍入处理后为-1.010(直接去掉多余的4位,因为此时最低位为0

2.朝0舍入Round toward zero (Truncate)

Rounded result is closest to but no greater in absolute value than the infinitely precise result.
四舍五入的结果在绝对值上最接近但不大于无限精确的结果。

//正数直接截尾
对于1.001_1001,舍入处理后为1.001(直接去掉多余的4位)
对于1.001_0111,舍入处理后为1.001(直接去掉多余的4位)

//负数直接截尾
对于-1.001_1000,舍入处理后为-1.001(直接去掉多余的4位)
对于-1.010_1000,舍入处理后为-1.010(直接去掉多余的4位)

3.朝正无穷舍入Round up (toward +∞)

Rounded result is closest to but no less than the infinitely precise result.
四舍五入的结果最接近但不低于无限精确的结果。

//正数多余位不全为0进位1
对于1.001_1001,舍入处理后为1.010(去掉多余的4位,加0.001)
对于1.001_0111,舍入处理后为1.010(去掉多余的4位,加0.001//正数多余位全为0直接截尾
对于1.001_0000,舍入处理后为1.001(直接去掉多余的4位)

//负数直接截尾
对于-1.001_1010,舍入处理后为-1.001(直接去掉多余的4位)

4.朝负无穷舍入Round down (toward −∞)

Rounded result is closest to but no greater than the infinitely precise result.
四舍五入的结果最接近但不大于无限精确的结果。

//正数直接截尾
对于1.001_1001,舍入处理后为1.001(直接去掉多余的4位)
对于1.001_0111,舍入处理后为1.001(直接去掉多余的4位)

//负数多余位全为0直接截尾
对于-1.001_0000,舍入处理后为-1.001(直接去掉多余的4位)

//负数多余位不全为0进位1
对于-1.001_1010,舍入处理后为-1.010(去掉多余的4位,加0.001

参考链接: https://www.cnblogs.com/jva-index/p/13897423.html
https://blog.51cto.com/u_8741388/1625404

三、舍入模式的英文简写

rne: 最近舍入,朝向偶数方向(round to nearest, ties to even)
rtz: 朝零舍入(round towards zero)
rdn: 向下舍入(round down)
rup: 向上舍入(round up)
rmm: 最近舍入,朝向最大幅度方向(round to nearest, ties to max magnitude)
dyn: 动态舍入模式(dynamic rounding mode)

后记:星光不问赶路人,时光不负有心人。

由MATLAB技术论坛原创,原帖参见http://www.matlabsky.com/viewthread.php?tid=3093 该教程详细介绍了MATLAB的舍入误差原理和计算,并给出实例验证。 由于涉及很多数学公式和图形,帖中不方便展示,下面给出了大概的内容提要,具体参见本帖pdf附件http://www.matlabsky.com/viewthread.php?tid=3093! 舍入误差是计算机进行实数计算是所产生的。之所以产生舍入误差是因为机器中进行的算术运算所涉及的数是有限位的,从而导致计算只能用实际数值的近视表示式来完成。在典型的计算机中,仅实数系统的一个相对小的子集用来表示所有的实数。这个子集包含了正负有理数,且存储了小数和指数部分。 IEEE754-1985二进制浮点运算标准 MATLAB中所有数值都是使用64bit表示的。根据754-1985规定,第一位是符号指示位(S),接下来的11位是指数部分(C),最后称为尾数的52位为小数部分(F),指数的基是2。 X64表示的区间范围 x64=0 10000000011 1011100100010000000000000000000000000000000000000000 y64=0 10000000011 1011100100001111111111111111111111111111111111111111 z64=0 10000000011 1011100100010000000000000000000000000000000000000001 这意味着,二进制机器数x64不仅仅代表十进制的x,还表示x临域内的所有实数,也就是说十进制区间(注意是左闭右开的区间) [(y+x)/2, (x+z)/2)= [15518507114430463/562949953421312, 15518507114430465/562949953421312) 内所有数据都是使用机器数x64表示的。这样机器的截断误差就出现了! 如何确定XMIN和XMAX 从IEEE754-1985的规定,我们容易知道64位机器数能够表示的最小正数,此时第64位为1其它为0,故 xmin=2^(-1023)*(1+0.5^52)≈10^(-308) 在计算小于xmin的数据的时候,MATLAB直接当0处理 同理最大的正数则第1位为0其它为1,故 xmax=2^1024*(2-0.5^52)≈10^308 在计算大于xmax数据时,MATLAB视为Inf X的精度范围求解 二进制数x64的前后一个数,相当于在x64尾数的最后一位加1或减1,故x64与最近的数之间的距离为0.5^52 ,另外指数位会将尾数放大了2^n倍,故最终x的精度为0.5*2^(n-52)(注意必须乘以0.5,原因如上)。故在±0.5*2^(n-52)范围内的数据,MATLAB都用x64表示,也就是认为都是x
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值