数据的截尾和舍人

截尾的情况:

代码

public static void main(String[] args) {
    double above = 0.7, below = 0.4;
    float fabove = 0.7f, fbelow = 0.4f;
    print("(int)above: " + (int)above);
    print("(int)below: " + (int)below);
    print("(int)fabove: " + (int)fabove);
    print("(int)fbelow: " + (int)fbelow);
  }

结果

(int)above: 0
(int)below: 0
(int)fabove: 0
(int)fbelow: 0 


舍人的情况(需要用到Math.round()方法):

代码

public static void main(String[] args) {  
    double above = 0.7, below = 0.4;  
    float fabove = 0.7f, fbelow = 0.4f;  
    print("Math.round(above): " + Math.round(above));  
    print("Math.round(below): " + Math.round(below));  
    print("Math.round(fabove): " + Math.round(fabove));  
    print("Math.round(fbelow): " + Math.round(fbelow));  
  }

结果

Math.round(above): 1
Math.round(below): 0
Math.round(fabove): 1
Math.round(fbelow): 0


 

(1) 首先将 x 和 y 转换为科学计数法形式: x = 1.1001010 x 2^103,y = -1.001011 x 2^2 然后将 x 和 y 的尾数对齐,因为 x 的阶码比 y 大,所以需要将 y 的尾数向右移动 101 位,同时要记得在尾数最高位补 1,因为这是规定的隐含位。 x = 1.1001010 x 2^103,y = 0.00001001011 x 2^103 接着将 x 和 y 的符号位相加,得到 x - y 的符号位为 0,即为正数。 接下来是尾数的运算。x 和 y 的尾数都是 8 位,所以可以直接相加。但是在相加之前需要将 y 的尾数取反,并加上 1,因为这是补码表示法。 y' = 1.11110110101 x + y' = 11.1001000110 由于相加后的结果超过了 8 位,所以需要将尾数向右移动一位,同时将阶码加 1。 x - y = 1.1100100 x 2^104 最后需要进行舍入处理,根据舍入规则,如果尾数的第 9 位为 1,则向最高位进位;如果尾数的第 9 位为 0,则直接舍去。 因为尾数的第 9 位是 0,所以结果为 1.1100100 x 2^104。 (2) x = -0.0001101011 x 2^-10,y = -1.1010101 x 2^-100 将 x 和 y 的尾数对齐,因为 y 的阶码比 x 小,所以需要将 x 的尾数向右移动 90 位,同时要在尾数最高位补 1。 x = 1.111111101011011 x 2^-10,y = 1.111111011010101 x 2^-10 接下来是尾数的运算。y 的尾数需要取反并加上 1,因为这是补码表示法。 y' = 0.000000100101011 x + y' = 1.111111110000110 尾数相加后,需要将阶码减 1,同时将尾数向右移动一位。 x - y = -1.000000001 x 2^-11 最后进行舍入处理。尾数的第 9 位是 0,所以结果为 -1.000000001 x 2^-11。 (3) x = 0.00010110 x 2^-1,y = -1.110010 x 2^2 将 x 和 y 的尾数对齐,因为 x 的阶码比 y 小,所以需要将 y 的尾数向右移动 1 位,同时在尾数最高位补 1。 x = 0.00010110 x 2^-1,y = 1.1110010 x 2^1 接下来是尾数的运算。y 的尾数需要取反并加上 1,因为这是补码表示法。 y' = 0.00011110 x + y' = 0.00010110110 尾数相加后,需要将阶码加 1,同时将尾数向右移动一位。 x - y = -1.0010110 x 2^0 最后进行舍入处理。尾数的第 9 位是 1,所以需要向最高位进位。进位后,尾数变为 -1.0010111,因为尾数的最高位是 1,所以需要将阶码加 1。结果为 -1.0010111 x 2^1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值