C语言_浮点数_IEEE 754标准_单片机_浮点数精度

发布者:EtherealGaze最新更新时间:2022-04-27 来源: eefocus关键字:C语言  浮点数  IEEE  精度 手机看文章 扫描二维码
随时随地手机看文章

IEEE 754标准

IEEE-754 标准浮点格式

浮点格式可分为符号位s,指数位e以及尾数位f三部分。 

其中真实的指数E相对于实际的指数有一个偏移量,所以E的值应该为e-Bias,Bias(127)即为指数偏移量。这样做的好处是便于使用无符号数来代替有符号的真实指数。尾数f字段代表纯粹的小数,它的左侧即为小数点的位置。规格化数的隐藏位默认值为1,不在格式中表达。


在IEEE-754 标准下,浮点数一共分为:


NaN:即Not a Number。非数的指数位全部为1 同时尾数位不全为0。在此前提下,根据尾数位首位是否为1,NaN 还可以分为SNaN 和QNaN 两类。前者参与运算时将会发生异常。

无穷数:指数位全部为1 同时尾数位全为0。大。

规格化数:指数位不全为1 同时尾不全为0。此时浮点数的隐含位有效,其值为1。

非规格化数:指数位全为0 且尾数位不全为0。此时隐含位有效值变为0。另外需要注意,以单精度时为例,真实指数e并非0-127=-127,而是-126,这样一来就与规格化下最小真实指数e=1-127=-126 达成统一,形成过渡。非规格化数隐函位表示为了0,此时表示的数据更小,提高了精度(0.1和1.1,隐含位是0的表示的更小)。

0 :指数位与尾数位都全为0,根据符号位决定正负。

float的范围

注意:指数的范围是-126~127,不是我们认为的-127~128 ,这个是IEEE-754标准中定义的。


(1)正数最大值如下:


高地址----------------------------->低地址


0 (1111 1110)( 111 1111 1111 1111 1111 1111)


当我们令指数位为:1111 1110 =254 (此处不能是1111 1111=255,1111 1111是NaN),则指数为254-127=127


尾数位全为1,则最大数为1.11111111111111111111111*2^127=(2-2^-23)*2^127=3.4028*10^38,正规格化数中的最大。其中1.111 1111 1111 1111 1111 1111+ 0.000 0000 0000 0000 0000 0001=2,0.000 0000 0000 0000 0000 0000=2-2^{-23}


当符号位为1时,是表示绝对值最大的负数


高地址----------------------------->低地址


1(1111 1110)( 111 1111 1111 1111 1111 1111)


表示-3.40*10^38


所以范围是-3.40*10^38 到 3.40*10^38


(2) float最小值(除0以外的最小值)


高地址----------------------------->低地址


0 (0000 0001)(000 0000 0000 0000 0000 0001)


当我们令指数位为:0000 0001 =1(此处不能是0000 0000=0,指数全零是非规格化数)则指数为1-127=126


为:1.0000 0000 0000 0000 0000 001*2^-126= 1.175e-038


 


float精度

float 类型的数据精度取决于尾数,首先是在不考虑指数的情况下23位尾数能表示的范围是[0, 2^23−1],实际上尾数位前面还隐含了一个"1",所以应该是一共24位数字,所能表示的范围是[0, 2^24-1](因为隐含位默认是"1",所以表示的数最小是1不是0),看到这24位能表示的最大数字为2^{24}-1,换算成10进制就是16777215,那么[0, 16777215]都是能精确表示的


16777215 这个数字可以写成1.1111111 11111111 1111111 * 2^{23},所以这个数可以精确表示,然后考虑更大的数16777216,因为正好是2的整数次幂,可以表示1.0000000 00000000 00000000 * 2^{24}所以这个数也可以精确表示,在考虑更大的数字16777217,这个数字如果写成上面的表示方法应该是 1.0000000 00000000 00000000 1 * 2^{24},但是这时你会发现,小数点后尾数位已经是24位了,23位的存储空间已经无法精确存储,这时浮点数的精度问题也就是出现了。


看到这里发现 16777216 貌似是一个边界,超过这个数的数字开始不能精确表示了,那是不是所有大于16777216的数字都不能精确表示了呢?其实不是的,比如数字 33554432 就可以就可以精确表示成1.0000000 00000000 00000000 * 2^{25},说到这里结合上面提到的float的内存表示方式,我们可以得出大于 16777216 的数字(不超上限),只要可以表示成小于24个2的n次幂相加,并且每个n之间的差值小于24就能够精确表示。换句话来说所有大于 16777216 的合理数字,都是[0, 16777215]范围内的精确数字通过乘以2^n得到的,同理所有小于1的正数,也都是 [0, 16777215] 范围内的精确数字通过乘以2^n得到的,只不过n取负数就可以了。


16777216 已经被证实是一个边界,小于这个数的整数都可以精确表示,表示成科学技术法就是1.6777216 * 10^{7},从这里可以看出一共8位有效数字,由于最高位最大为1不能保证所有情况,所以最少能保证7位有效数字是准确的,这也就是常说float类型数据的精度。


float小数


从上面的分析我们已经知道,float可表示超过16777216范围的数字是跳跃的,同时float所能表示的小数也都是跳跃的,这些小数也必须能写成2的n次幂相加才可以,比如0.5、0.25、0.125…以及这些数字的和,像5.2这样的数字使用float类型是没办法精确存储的,5.2的二进制表示为101.0011001100110011001100110011……最后的0011无限循环下去,但是float最多能存储23位尾数,那么计算机存储的5.2应该是101.001100110011001100110,也就是数字 5.19999980926513671875,计算机使用这个最接近5.2的数来表示5.2。关于小数的精度与刚才的分析是一致的,当第8位有效数字发生变化时,float可能已经无法察觉到这种变化了。


 


读取小数存储的原始值(举例)

stm32 中小数存储计算


counter+=0.001;


if(counter==0.01)//该条件永远不会成立,十进制小数转换二进制的问题导致,应该转换为大于等于或者小于等于


asda=*(vu32*)&counter;可通过该句读取counter在内存中的存储的数据;


asda=*(vu32*)&counter;取counter地址,指针类型强制转换成vu32*,然后*取内容。


0.01为0x3C23D70A,转换成2进制


0011 1100 0010 0011 1101 0111 0000 1010


符号位 0 代表正数


指数011 1100 0  为120  (120-127)=-7,小数点左移动7。(如果是130则130-127=3,表示小数点右移动三位。)


尾数01000111101011100001010  左边有一个可以理解的二进制点。此数字从浮点数的存储形式中省略。在尾数的开头加上1和二进制点可得到以下值:


1.0100 0111 1010 1110 0001 0100 左移7位为0.0000 0010 1000 1111 0101 1100 0010 1000


http://www.ab126.com/system/7348.html (带小数的二进制转换十进制计算器的网址)


转换为十进制0.00999999977648258


实际在watch窗口中观察写入0.01为0.00999999978(被四舍五入了)

关键字:C语言  浮点数  IEEE  精度 引用地址:C语言_浮点数_IEEE 754标准_单片机_浮点数精度

上一篇:C语言_单片机_break,return,continue,指针优先级
下一篇:单片机C语言汇编代码

推荐阅读最新更新时间:2024-11-12 10:37

IEEE 802.3bt PD 控制器为更高的功率铺平了道路
加利福尼亚州米尔皮塔斯 (MILPITAS, CA) 2016 年 9 月 12 日 凌力尔特公司 (Linear Technology Corporation) 推出IEEE 802.3bt 受电设备 (PD) 接口控制器 LT4295,该器件适用于要求接受高达 71W 功率的应用。下一代以太网供电 (PoE) 标准 IEEE 802.3bt 使制造商能够超越 2009 IEEE 802.3at 标准分配的 25.5W 功率。凌力尔特准备率先提供符合下一代 IEEE 标准的产品。这个新标准又称为 PoE++ 或 4PPoE,提高了功率预算以实现新型应用和功能,同时支持 10Gb 以太网 (10GBASE-T),并保持与较旧版本
[模拟电子]
<font color='red'>IEEE</font> 802.3bt PD 控制器为更高的功率铺平了道路
Teledyne高分辨率ToF传感器问市,短中远程均有出色时域精度
Teledyne e2v , Teledyne Technologies 旗下的全球成像解决方案创新公司,宣布推出专为 3D 检测和距离测量定制的新型 Hydra3D ™ 飞行时间 (ToF) CMOS 图像传感器。它支持最新的工业应用,包括视觉引导机器人技术、物流以及自动导引车。 Hydra3D 的高分辨率和灵活配置,再搭配片上 HDR 的设计,使其成为监控、 ITS 、建筑和无人机等户外应用的最佳选择。 该传感器由高价值模拟半导体铸造解决方案的领导者 Tower Semiconductor 制造,它拥有尖端的 10 µm 三内存节点像素并且融入了 Teledyne e2v 的独家 CMOS 技术。
[传感器]
Teledyne高分辨率ToF传感器问市,短中远程均有出色时域<font color='red'>精度</font>
IEEE启动公益性网站App-E-Feat
美国纽约,2014年2月24日——全球最大的科技专业人员组织IEEE(电气与电子工程师协会)今天启动了App-E-Feat推广项目,该项目以网络为中心,为工程师和认同IEEE为人类推动科技进步这一使命的机构搭建联络平台,让他们可以共同开发移动应用程序。App-E-Feat的启动是IEEE 克林顿全球倡议行动承诺的一部分。 IEEE执行董事兼首席运营官E. James Prendergast说:“科技在促进社区发展和保护环境利益中起关键作用。我们致力于通过有效的途径将IEEE工程师和学生与他们能够帮助的机构建立联系,通过App-E-Feat关系圈共同开发的移动应用,将为它们所服务的人群创造新的机会与解决方案。” 为庆祝
[手机便携]
为何电机扭矩测量结果和传感器精度对不上?
对于测试系统每每说到测试精度,人们一定会问系统精度能做到多少,因为大家都知道测试系统的精度受多种因素影响,绝非是简单的测量仪器精度所能保证的。今天就说说电机测试系统中的扭矩测量精度如何保证。 在电机测试系统当中,扭矩的测量往往是通过扭矩传感器来实现的。下图是典型的电机扭矩测试方式: 被测电机通过联轴器连接扭矩传感器,扭矩传感器另外一端通过联轴器连接负载电机。系统工作时,被测电机工作在速度环(或扭矩环),负载电机工作在扭矩环(或速度环),扭矩传感器测量扭矩大小并将扭矩值通过信号传送给测量仪器。 了解了扭矩测试过程,我们就可以找到扭矩测试的关键因素点: 1、扭矩传感器的测量精度; 2、测试仪器的测量精度;
[测试测量]
为何电机扭矩测量结果和传感器<font color='red'>精度</font>对不上?
NEC虹膜识别技术在NIST精度测试中名列第一
通过“Bio-IDiom”生物认证加强安全性 4月27日, 日本电气株式会社 (NEC Corporation)(TOKYO: 6701)宣布,其虹膜识别技术在最近由美国国家标准与技术研究院(NIST)对虹膜自动识别算法进行的Iris Exchange (IREX,*1) IX评估中,取得了最高匹配精度的成绩。 虹膜识别是一种利用虹膜图案进行生物识别的技术,虹膜是围绕瞳孔的圆环状组织。近年来,这种技术已被需要大规模匹配的系统所采用,主要用于组织和公司,因为它可以通过不需要物理接触的设备来快速提供高度准确的身份验证。 从隐私保护和加强安全的角度来看,政府机构尤其越来越需要可靠的个人身份验证,其目的包括公民身份证、移民控制和刑事调
[安防电子]
Maxim推小尺寸IO-Link环境光传感器 面向高精度检测工业应用
Maxim Integrated Products, Inc. 推出Santa Cruz (MAXREFDES23#)环境光传感器(ALS),能够在工厂快速配置和监测多路红、绿、蓝(RGB)可见光和红外(IR)信号环境光传感器,适用于需要高精度检测的工业应用。 为保持竞争力和高质量水准,现代化工厂必须具备相当的灵活性,在降低成本的同时最大程度地延长“正常运行时间”。Santa Cruz ALS方案可大大提高工厂的连通性,该参考系统提供宽动态范围的透光、RGB可见光、红外信号以及温度数据。Santa Cruz模拟人眼对可见光的反应,实现高精度系统测量。此外,该方案具有无与伦比的光检测灵敏度和极低的延迟。内置IO-Link®软件和
[嵌入式]
睿感(ScioSense)推出业界领先的高精度高性能数字温湿度传感器ENS21X系列
睿感(ScioSense)推出业界领先的高精度高性能数字温湿度传感器ENS21X系列 • 精度行业领先 • 响应速度快 • 超低功耗 • 车规级认证 荷兰 埃因霍温,中国 济南,2022年11月3日——业界领先的环境和高精度流量和时间测量传感芯片厂商ScioSense(睿感)今日宣布, 推出独特的ENS21x高精度高性能数字温湿度传感器系列 ,将温湿度测量水平推向行业新高,可满足汽车、工业、消费电子以及仪器仪表应用的精准测量需求。 温度和湿度与人类的生产生活息息相关。随着人们对于健康以及居住环境的关注,也加速了高精度温湿度传感器产品发展。 ScioSense推出的ENS21x系列产品在单个芯片
[传感器]
睿感(ScioSense)推出业界领先的高<font color='red'>精度</font>高性能数字温湿度传感器ENS21X系列
51单片机的一些开发实用技巧
一.C语言中嵌入汇编语言 单片机开发中,通常我们使用C语言编写主程序,这样可以充分借助C语言工具提供的运算库函数及强大的数据处理能力。但C语言的可控性不及汇编语言,在有些对时序要求严格的处理上,我们还需用灵活性更强的汇编语言来编写。上海AVR单片机培训这样就产生了C语言和汇编语言混合编程的问题,一般分成三种方式:1.汇编语言调用C语言函数;2. C语言调用汇编语言;3. C语言中嵌入汇编语言。这里我们主要介绍第3种,即C语言中嵌入汇编语言。 下面的一段程序是主程序调用精确的205μS延时子程序并使P1.0交替输出高、低电平的方波。 /*------------程序名test.c------------*/ #include P
[单片机]
51单片机的一些开发实用技巧

推荐帖子

关于WINCE下USB与ActiveSync的连接问题
关于WINCE下USB与ActiveSync的连接问题我用的是YLE2440的核心板,仿照底板画的底板,去掉了一些模块。USB部分与原板画的一模一样。USB在BOOT部分工作正常,能够下载内核并很稳定,但是进入WINCE后,无法与ActiveSync建立联接,驱动部分用的是板子自带的。我在驱动部分加了一些调试信息,如下,然后附上了当USB插入电脑时DNW输出的调试信息,希望各位高手能够帮忙看一下,非常感谢!!staticVOIDHandleUSBEvent(PCTRLR
whl0808 WindowsCE
FPGA加密方案
FPGA加密方案QQ:344383284FPGA加密方案
阿里波特 安防电子
从AD9里的官方库里把LQFP48的封装找到,分N、L、M三种,咋选
从ALTIUM的网站下了ST的STM32的集成库,原理图、封装库很齐,但发现STM32F101C6T6有三个LQFP48的封装,分别是LQFP48_N,LQFP48_L,LQFP48_M。有一个表知道时间,两个就不知道时间了,何况是三个不一样的。昏倒!基本是焊盘的长宽比有些差别。随便用也许也可以。但有人指点一下这三个在用途上是不是有区别吗?从AD9里的官方库里把LQFP48的封装找到,分N、L、M三种,咋选尺寸
zizimolan stm32/stm8
求 wince下打包工具
请问各位大侠,你们在wince下打包的时候都用什么工具?求wince下打包工具WinCECABManager或者VisualStuido打包都可以。谢谢!我已经找到安装上了.做手机的应用开发建议使用ECDS-MUI嵌入式跨平台手机应用程序开发库,跨平台开发,高效,13天完成一套手机交易系统的开发(alpha),只用编写一次代码,生成所支持的5个平台的应用程序,可以在eeworld:http://download.eeworld.net/source/180559上下载,或到
hipy_hht WindowsCE
FRAM_GUI.exe无法运行
刚在试试买回来的板子FRAM_GUI.exe双击没反应?另MSP-EXP430FR5739的例程是用ccs打开还是IAR?FRAM_GUI.exe无法运行我觉得应该用IAR的kankan看看里面的程序头文件应该就知道了把例程用ccs,IAR打开都可以的要装jdk,上位机使用java写的;demo工程用IAR5.3打开。.好的,谢谢各位,我先试试http://java.com/zh_CN/download/index.jsp装JDK。。http://ww
pig163xx 微控制器 MCU
摩托罗拉推出新款T305蓝牙Car Kit
本帖最后由jameswangsynnex于2015-3-319:59编辑  正在新加坡举行的2006亚洲电信展上来自美国的摩托罗拉公司正式对外推出了该公司最新的手持式蓝牙车载免提系统(CarKit)MotorolaT305。从相关的资料中我们可以得知摩托罗拉此次推出的这款CarKit产品能够够支持噪音抵制以及回声效果此外该款产品扬声器的功率为1W,因此将可以为用户带来非常清晰的通话效果。  在功能方面,MotorolaT305除了可以通过内置的Bluetooth2.0
mdreamj 移动便携
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved