ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IEEE754浮点数转换

2022-09-14 11:33:31  阅读:238  来源: 互联网

标签:阶码 转换 二进制 浮点数 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有