0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文带你秒懂IEEE 754浮点数

朱老师物联网大讲堂 2024-03-18 08:09 次阅读

一、简介

1、常见的浮点数表示方式是IEEE 754标准,它规定了浮点数的存储格式和运算规则,这个标准定义了两种浮点数表示:单精度和双精度。

2、任何一个浮点数的二进制数可以写为:NUM = (-1) ^ S* 2 ^ E * M 。以float32类型举例:

2.1、S表示符号:S为0时表示一个正数;当S为1时表示一个负数

2.2、E表示阶乘、指数:E是一个无符号整数,所以E的取值范围为(0~ 255)。但是在计数中指数是可以为负的,所以规定在存入E时,在它原本的值上加上中间数(127),在使用时减去中间数(127),这样E的真正取值范围就成了(-127~128)。对于E还分为以下三种情况:

(1)E不全为0,不全为1:这时就用正常的计算规则,E的真实值就是E的字面值减去127(中间值),M的值要加上最前面的省去的1

(2)E全为0:这时指数E等于1-127为真实值,M不再加上舍去的1,而是还原为0.xxxxxxxx小数。这样为了表示0,和一些很小的整数。

(3)E全为1时分三种浮点数特殊情况:M全为0时,±无穷大(取决于符号位);M为非全0时,表示NaN。

d350f726-e4bb-11ee-9118-92fbcf53809c.png

2.3、M表示有效数字、尾数:规定M的值一定是1 <= M < 2,可以写成1.xxxxxxx的形式,所以规定M在存储时舍去第一个1,只存储小数点之后的数字。这样做节省了空间,以float类型为例,就可以保存23位小数信息,加上舍去的1就可以用23位来表示24个有效的信息

3、单精度(32位):符号位(1 bit)、指数位(8 bits)、尾数位(23 bits)

4、双精度(64位):符号位(1 bit)、指数位(11 bits)、尾数位(52 bits)

5、存储格式:以float32的浮点数举例如下图

d3610cce-e4bb-11ee-9118-92fbcf53809c.png

二、十转二进制

1、以float32浮点数和23.375浮点数举例

2、整数转换方式:对2取余

d378a65e-e4bb-11ee-9118-92fbcf53809c.png

3、小数转换方式:对小数进行2乘留整再对小数2乘直至为小数部分为0

d384ed1a-e4bb-11ee-9118-92fbcf53809c.png

4、合并整数和小数部分:10111 和小数部分 0.011 得到二进制浮点数 10111.011

5、规范化和指数表示6、最终,将符号位、指数和尾数合并,得到IEEE 754标准的二进制浮点数表示为:

d39326a0-e4bb-11ee-9118-92fbcf53809c.png

三、二转十进制

1、以上面的23.375浮点数的转换结果0 10000011 01110110000000000000000举例
2、主要是这个公式:NUM = (-1) ^ S * 2 ^ E * M,分三步第一步:(-1) ^ S第二步:2 ^ E第三步:M3、符号位 (-1) ^ S:(-1)^04、指数位 2 ^ E :将二进制转十进制为131,然后减去偏移值127,得到5、那么这里就是 2 ^ 46、M:分两步

  1. 先转换为二进制浮点数,根据E不全为0或1的规则得到:1.01110110000000000000000
  2. 再用2的阶乘的方式转换为浮点数,如下:

d399cd3e-e4bb-11ee-9118-92fbcf53809c.png

四、误差

1、如下代码展示

d3a5c42c-e4bb-11ee-9118-92fbcf53809c.png

2、原因:在计算机中,由于浮点数的表示方式是有限的,有些十进制小数无法精确表示为二进制浮点数。这导致在进行浮点数运算时可能出现舍入误差,进而导致预期的结果和实际的二进制浮点数表示的结果不完全相等。

3、将0.1转为二进制

d3b1f300-e4bb-11ee-9118-92fbcf53809c.png

4、这个过程会一直持续下去,因为 0.1 在二进制中是一个无限循环小数。

5、将-0.1转为二进制

6、首先,-0.1 可以表示为二进制的补码形式。如果我们考虑一个32位的单精度浮点数,其符号位为1,指数位为127(偏移值),尾数部分为 0.00011001100110011001100...(重复的 1100 模式)。

7、进行加法操作

d3c7e228-e4bb-11ee-9118-92fbcf53809c.png

8、这个结果实际上是一个无限循环的二进制小数。由于计算机内存是有限的,最终只能存储一个有限位数的二进制小数,因此可能会进行截断或舍入操作,导致精度损失。

9、在实际计算机系统中,这种舍入误差可能会导致结果不等于精确的零,因为我们不能精确地表示无限循环小数。这就是为什么在计算机编程中进行浮点数比较时,通常使用一个小的误差范围而不是直接比较相等。

10、改进方式

d3d959e0-e4bb-11ee-9118-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    7496

    浏览量

    87999
  • 编程
    +关注

    关注

    88

    文章

    3616

    浏览量

    93750
  • 计算机系统
    +关注

    关注

    0

    文章

    282

    浏览量

    24123
收藏 人收藏

    评论

    相关推荐

    32位单精度IEEE-754浮点数转换为10进制数

    本帖最后由 hejin515 于 2016-6-5 16:02 编辑 请问谁接做过32位单精度IEEE-754浮点数的数据采集,LabVIEW如何实现将其转换为十进制数?转化的方式如下图,用C好实现,但是用LabVIEW简直觉得不可思议。
    发表于 06-05 15:59

    请问320F2812的浮点数算术标准是否遵循IEEE754 ?

    你好,我在进行对双精度浮点数(double)二进制bit处理的时候,看到2812的浮点数IEEE754浮点数在内存中存储不样。请问,32
    发表于 09-30 11:23

    帮助添加十进制浮点数

    是否有可能代表IEEE-754-2008号。在Xilinx上(即没有拆包)??或者是否有个std方法来解压no。从ieee十进制浮点数到二进制格式??以上来自于谷歌翻译以下为原文
    发表于 04-26 11:15

    请问怎么将IEEE 754(32位十六进制)转换为十进制浮点数

    亲爱的先生,我需要知道把IEEE 754(32位十六进制)转换成pic24小数浮点数的方法。例如,如果我要将下面的十六进制数据转换为浮点数arr[]="0x4203fc36"分隔
    发表于 09-04 06:54

    IEEE754浮点数需要的数据类型转换

    今天做了三个子VI,将16进制字符串转换成2进制字符串,二进制转换成10进制。按IEEE-754标准将4字节16进制字符串转换成浮点数。如果有误,请大家指正。
    发表于 01-23 15:08

    浮点数IEEE 754标准相关资料分享

    浮点数IEEE 754标准简而言之,该标准采用了以2为基数的科学记数法记录实数,并将记数范围上的4个边界值定义为不同的特殊值。 上述元素之间的关系为:符号域S记录了浮点数的符号;阶码
    发表于 12-09 06:54

    ieee754标准下载

    ieee754标准: IEEE754代码标准表示法为便于软件的移植,浮点数的表示格式应该有统标准(定义)。1985年IEEE(Insti
    发表于 07-13 03:41 68次下载

    浮点数的表示方法

    浮点数的表示方法  浮点数,是指小数点在数据中的位置可以左右移动的数据。它通常被表示成:    N = M* RE  这里的M(Mantissa)被称为浮点数
    发表于 10-13 17:13 1.6w次阅读
    <b class='flag-5'>浮点数</b>的表示方法

    IEEE754浮点数格式

    在计算机中,需要对小数进行计算,因此需要相应的电路支持。支持小数计算的电路有两种:定点部件和浮点部件。定点部件与整数部件没有本质区别,只是要假设有个小数点存在于某两位数之间,计算时需要把小数点对齐。本文首先介绍浮点数标准
    发表于 11-17 11:09 1.5w次阅读

    Cortex-M4 浮点数的存储 和 FPU(Floating Point Unit) 杂记

    浮点数IEEE 754标准简而言之,该标准采用了以2为基数的科学记数法记录实数,并将记数范围上的4个边界值定义为不同的特殊值
    发表于 11-26 14:06 9次下载
    Cortex-M4 <b class='flag-5'>浮点数</b>的存储 和 FPU(Floating Point Unit) 杂记

    浮点数的精度问题

    还是要从浮点数的存储和标识出发来处理该问题,既然浮点数天然就存在定的误差,而有时候计算又无法获得唯的数值,如下图所示,浮点数计算出来的实
    的头像 发表于 08-11 14:28 4612次阅读
    谈<b class='flag-5'>一</b>谈<b class='flag-5'>浮点数</b>的精度问题

    什么是浮点数浮点数在内存中的存储

    浮点型简单讲就是实数的意思。浮点数在计算机中用以近似表示任意某个实数。
    的头像 发表于 11-09 11:07 5388次阅读
    什么是<b class='flag-5'>浮点数</b>?<b class='flag-5'>浮点数</b>在内存中的存储

    什么是浮点数

    Python数据类型第种:字符串(str)。 Python数据类型第二种:整数(int)。 Python数据类型第三种:浮点数浮点数的英文名是float,浮点数没有简写。
    的头像 发表于 02-23 14:58 4631次阅读

    PLC中浮点数的二进制表示

    我们日常使用的各类数据,都是以二进制的方式存储的。以浮点数为例,在PLC中其表示方式使用了IEEE 754标准。许多编程语言中浮点数的实现也遵循该标准。
    的头像 发表于 03-23 13:50 5351次阅读
    PLC中<b class='flag-5'>浮点数</b>的二进制表示

    modbus浮点数怎么读取

    常重要的。 首先,要理解Modbus浮点数的表示方式。在Modbus协议中,浮点数采用了IEEE 754标准进行编码和解码。IEEE
    的头像 发表于 12-28 14:38 6366次阅读