我是靠谱客的博主 狂野白开水,最近开发中收集的这篇文章主要介绍计算机内部浮点数表示方法以及计算方式AND计算机内部浮点数加减法运算规则和步骤(包含实例)(32位为例),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

计算机内部浮点数表示方法以及计算方式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)

最后

以上就是狂野白开水为你收集整理的计算机内部浮点数表示方法以及计算方式AND计算机内部浮点数加减法运算规则和步骤(包含实例)(32位为例)的全部内容,希望文章能够帮你解决计算机内部浮点数表示方法以及计算方式AND计算机内部浮点数加减法运算规则和步骤(包含实例)(32位为例)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部