计算机内部浮点数表示方法以及计算方式AND计算机内部浮点数加减法运算规则和步骤(包含实例)(32位为例)

本文详细介绍了如何将十进制数转换为浮点数格式,包括整数部分和小数部分的二进制转换,以及32位浮点数的表示。接着,通过实例展示了浮点数加减法的计算过程,包括对阶、尾数相加减、规格化、舍入处理和溢出检查,揭示了浮点计算中精度损失的原因。
摘要由CSDN通过智能技术生成

计算机内部浮点数表示方法以及计算方式AND计算机内部浮点数加减法运算规则和步骤(包含实例)(32位为例)

一. 将215642.36421转换为浮点数表示格式

1.首先将整数部分转变为2进制:

215642/2=107821…0
107821/2=53910…1
53910/2=26955…0
26955/2=13477…1
13477/2=6738…1
…以此类推
6/2=3…0
3/2=1…1
1/2=0…1

所以:215642(10)=110100101001011010(2)

2.再将小数部分转变为二进制:

0.36421 × 2 =0.72842
0.72842 × 2 =1.45684
0.45684 × 2 =0.91368
0.91368 × 2 =1.82736
0.82736 × 2 =1.65472
0.65472 × 2 =1.30944
0.30944 × 2 =0.61888
0.61888 × 2 =1.23776
…以此类推
无限循环,结果超出精度范围,保留16位

所以: 0.36421(10)≈ 0.0101110100111100(2)

3.将整数部分和小数部分综合:

215642.36421(10)=110100101001011010.0101110100111100(2)

4.综合转换为浮点数(符号+阶码+尾数)(32位)

因为215642.36421正数,所以符号位为0;

110100101001011010.0101110100111100=1.101001010010110100101110100111100×2^17 所以指数为17

阶码=127+17=144(10)=1001 0000(2)

尾数=101001010010110100101110100111100(2)

所以在32位精度下,215642.36421所转换成的浮点数为:

      0100 1000 0101 0010 1001 0110 1001 0111  
          4       8       5       2       9       6       9       7(16进制)        

由此可以看出,小数点后面的多位二进制被忽略,这也是造成计算机计算浮点数会出现一些精度差异错误的原因。

二. 浮点数加减法

(1)260.50+120.46 《补码计算》

                     符号位  +        阶码          +      尾数

260.50(10)= 0 + 10000111 + 00000100100000000000000(2)

                     符号位  +        阶码          +      尾数

120.46(10)= 0 + 10000101 + 11100001110101110000101(2)

1.对阶

根据两个浮点数的阶数可知道,260.50和120.46相差两个阶数,所以低阶位的120.46的浮点数的尾数右移两位得:
0111100001110101110000101

2.尾数相加减
260.50的尾数(补): 00.00000100100000000000000
120.46的尾数(补):+ 00.0111100001110101110000101
——————————————————————
得 00.0111110011110101110000101

3.尾数规格化

*这两个浮点数尾数相加结果不需要规格化

4.尾数的舍入处理

因为尾数只需要23位,用0舍1入法得到的尾数为:01111100111101011100001

5.溢出检查

*无溢出

#所以,最后得到260.50+120.46=380.96(10)=0 10000111 01111100111101011100001

(2)260.50-120.46 等价于260.50+(-120.46)

                     符号位  +        阶码          +      尾数

260.50(10)= 0 + 10000111 + 00000100100000000000000(2)

                     符号位  +        阶码          +      尾数

-120.46(10)= 1 + 10000101 + 11100001110101110000101(2)

1.对阶

根据两个浮点数的阶数可知道,260.50和-120.46相差两个阶数,所以低阶位的-120.46的浮点数的尾数右移两位得:
0111100001110101110000101
2.尾数相加减

260.50的尾数(补): 00.0000010010000000000000000
-120.46的尾数(补):+ 11.1000011110001010001111011
——————————————————————----
得 11.1000110000001010001111011
3.尾数规格化

尾数左移一位得:11.000110000001010001111011
*阶码减一

4.尾数的舍入处理

因为尾数只需要23位,尾数为:00011000000101000111101

5.溢出检查

*无溢出

#所以,最后得到260.50-120.46=140.04(10)=0 1000011 000011000000101000111101(2)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻若♛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值