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

    文章

    6649

    浏览量

    84523
  • 编程
    +关注

    关注

    88

    文章

    3440

    浏览量

    92388
  • 计算机系统
    +关注

    关注

    0

    文章

    213

    浏览量

    23880
收藏 人收藏

    评论

    相关推荐

    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

    TMS320C6678 1钟能算20G次浮点数运算吗?

    芯片介绍上写浮点运算能力达到20GFLOPS,是说1钟能算20G次浮点数运算吗?按照主频1.25GHz算,相当于每ns计算16次浮点数运算对吗?那如果计算1百万次
    发表于 01-07 11:08

    帮助添加十进制浮点数

    是否有可能代表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(Institute of Electrical and
    发表于 07-13 03:41 65次下载

    浮点数的表示方法

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

    IEEE754浮点数格式

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

    谈一谈浮点数的精度问题

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

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

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

    什么是浮点数

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

    PLC中浮点数的二进制表示

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

    modbus浮点数怎么读取

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