其他分享
首页 > 其他分享> > IEEE754浮点数转换

IEEE754浮点数转换

作者:互联网

本次探究一下十进制单精度浮点数转换为二进制形式的方式

探究原因

由于目前大部分计算机存储数据是以二进制的形式储存,那么会在输入十进制数据时转化为二进制,然而在由于字节数有限,再转化过程中可能会导致数据丢失而精度下降。探究转换方式,易于理解为什么会精度下降。

必要知识

对于32位的单精度浮点数,数符分配是1位,阶码分配是8位,尾数分配是23位。

简单来说,数符表示符号:“0”为正,“1”为负;阶码存储指数部分;尾数存储小数部分。

转化过程

不妨以5.75为例子

1.整数部分

整数部分除以2取余

5除以2,商2余1,将余数放在左面,即“1”;

以上次的商作被除数,再次取余,商1余0,将余数放在左面,即“01”;

重复上步,商0余1,即“101”.

商0后便可停止取余。

2.小数部分

小数部分乘2取整

0.75乘2,得1.5,取整数1放在右面,剩下0.5,即“1”;

重复上步,得1.0,取整数1放在右面,剩下0.0,即“11”;

剩下0后便可停止取整.

3.拼接

则转化后的值为101.11。

4.科学计数

将小数点移动至最高整数位的1后面,移动后为1.0111,移动的位数为十进制下的2,则可以写成

1.0111*2^2

那么十进制下的5.75便是二进制下的1.0111*2^2.、

那这个1.0111*2^2具体是如何储存的?

储存方法

这里先给表格

数符 阶码 尾数
                                                               

1.数符

这是个正数,那么数符便要填0

数符 阶码 尾数
 0                                                              

 

2.阶码

阶码 = 阶数 + 偏移量

阶数可以简单理解为小数点移动的位数,即2.

偏移量为2^(e - 1) - 1,其中e为阶码的位数,再该次转换中e = 8,故偏移量为127.

故该数的阶码为127 + 2 = 129.

129转换为二进制,为10000001.

注意:由于阶数可以是负数,这时候的算出来的阶码不足八位,需要在高位即左边补0至八位。

 数符 阶码 尾数
 0  1                                              

 

3.尾数

尾数储存科学计数法中的小数部分。

在二进制的科学计数法中,整数部分总是1,故该部分不会储存在尾数中,可以留出空间提高小数精度。

小数部分为0111,不够23位则在后面补0

数符 阶码 尾数
0 1 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

那这便是5.75储存在计算机中的格式。

这里提供了一个工具,我们不妨验证一下

 

 看来结果是对的。

那同理,

对于161.875,其转化为二进制,是1.0100001111*2^7,储存形式为

 

 
数符 阶码 尾数
0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
对于-0.0234375,其转化为二进制,是-1.1*2^(-6),储存形式为
数符 阶码 尾数
1 0 1 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

 

 

 参考资料

1.十进制浮点数转换成IEEE754标准的32浮点数的二进制格式 - 立志做一个好的程序员 - 博客园 (cnblogs.com)

2.浮点数的十进制和二进制转换(详细例子解答)_*Temporary的博客-CSDN博客_float二进制转十进制

3.如何手算十进制浮点数转二进制(IEEE754-32位)浮点数 - 简书 (jianshu.com)

4.十进制浮点数转换为二进制数以及存储方式_willingtolove的博客-CSDN博客_十进制浮点数转二进制

5.浮点数的二进制表示(IEEE 754标准) - 知乎 (zhihu.com)

工具

IEEE 754 计算器 (weitz.de)

标签:阶码,转换,二进制,浮点数,IEEE754,尾数,数符,十进制
来源: https://www.cnblogs.com/Joci-zhuoxue/p/16692232.html