苏州实操派科技有限公司官网-实操派教育科技,汇川技术PLC培训,实操派PLC培训,苏州PLC培训机构

分享:浮点数精度问题

[复制链接]
11 380

附件下载,需登录可以查看贴内更多信息

您需要 登录 才可以下载或查看,没有账号?立即注册

x
分享一个计算机的知识,浮点数储存机制导致的精度问题

各位有没有遇到过浮点数多次相加,得到的结果却不是自己想要的,比如0.01相加100次理论结果应该是1,但是实际结果是0.999999344。或者再简单一点,0.3+0.4(常数)=0.7,0.3+0.4(变量)=0.700000048,
1.png

这其实就表明了浮点数计算存在精度问题。那么为什么会出现这样的问题呢?精度是如何丢失的?首先我们要清楚浮点数和整数储存数据的区别,了解浮点数储存的机制,才能有方法去解决相关精度问题。
直接给出结论,精度丢失在小数部分不断×2的过程中,有限的数据位无法表示无限的循环结果。

1.整数16位储存机制
简单说下整数储存,计算机语言储存采用二进制,一般使用的十进制数据输入计算机后均是转换为二进制进行处理,int型整数有16位,留1位符号位和15位数据位,数据区间-32768~32767(±2e15)。uint类型更直观,无符号16位数据位,高低字节更加清晰明了。其余双整型long之类就不谈了。

2.浮点数32位储存机制
2.png

浮点数也是采用二进制储存,但是不像整型数据从左到右按顺序来严格储存,而是分了三个区间,分别是:1位符号位、8位指数位、23位小数位。储存大概分为三步。

第一步:浮点数转换为二进制表示

  • 整数部分,直接转换为二进制,即:`100111`小数部分,让小数一直乘2,小于1则用结果继续乘,大于1则结果减1继续乘,等于1则结束。

3.png


第二步:科学计数法表示二进制小数#注意:因为是二进制小数,所以底数是2
4.png


第三步:存储
注意:
①指数储存+127;
②因科学计数法表示相同,储存科学计数法省略前方的 ' 1. ';


5.png



例如:浮点数6.4


整数6表示二进制2#110,去除最高位后2#10
指数为6>2e2,指数部分为127+2=129,表示为2#1000 0001
小数部分0.4,表示为2#0110 0110 0110 0110 ……无尽循环,精度丢失就在这个环节!23位数据无限循环处理不完

组合起来数据:(0符号位)(1000 0001指数位)(10整数位0110 0110 0110 0110小数位)
6.png

各位可以在上位机仿真查看数据结果,将浮点数的字节拿出来,用仿真二进制显示。如有错误请指正。


精度问题解决方案

了解了浮点数储存机制后,精度的问题就显露出来了,小数部分位数越多越可能出现精度问题,个人想到的解决方案如下。

①最简单的提高精度方法是把float转成double储存,也就是32位的real类型转成64位的lreal类型。

②还有一种方法就是先将小数位放大去计算,计算完成后再缩小储存,可以防止计算过程中的精度问题,例如0.01相加1000次,可以改为0.01放大100倍=1,相加1000次后再除100。

③再有就是尽量以1/2^n的小数去储存,例如0.125,0.25,0.5,这样可以在有限的23位中表示完整的数据,就不会有精度问题了。







免责声明:内容为网友自行发布或者来自互联网资源或者参考文献,如果侵犯了您的权益,请联系站长 1304546267@qq.com,我们会及时删除侵权内容,感谢您的理解!

相关帖子

回复

使用道具 举报

附加一条精度解决方案:
④23位小数位包含整数,整数越多小数越少,可以将小数位单独储存,那么23位小数位全部用来储存小数,精度也能随之提高,如果整数不是0且基本不变的情况下可以尝试此方法。
例如:数据a一直在100.1-100.3之间变化,那么可以认为整数100是不变的,仅取小数位0.1-0.3来储存可以提高6位(2^6=64<100)精度。
回复

使用道具 举报

很好的分享贴,一直没弄明白浮点数存储,感谢楼主科普!
回复

使用道具 举报

123458512 2022-4-6 23:39:23 | 显示全部楼层
感谢分享
回复

使用道具 举报

段琰baby 2022-4-6 23:43:25 | 显示全部楼层
感谢分享
回复

使用道具 举报

Rocco83100 2022-4-6 23:50:30 | 显示全部楼层
感谢分享
回复

使用道具 举报

于下雨果 2022-4-7 07:58:33 | 显示全部楼层
感谢分享!
回复

使用道具 举报

感谢分享 1.png
回复

使用道具 举报

感谢分享
回复

使用道具 举报

前来学习学习
回复

使用道具 举报

单精浮点指数范围-128~127,上面写的“126~127”
回复

使用道具 举报

文章大纲:

一、浮点数的储存机制
  A. 浮点数的表示方法
  B. 浮点数的储存结构

二、浮点数精度问题的原因
  A. 浮点数的有限精度
  B. 储存结构导致的精度损失

三、解决浮点数精度问题的方法
  A. 使用双精度浮点数
  B. 放大再缩小
  C. 使用特定的小数进行储存

四、实际案例分析与应用
  A. 浮点数相加得到不准确结果的案例
  B. 使用双精度浮点数提高精度的案例
  C. 放大再缩小解决精度问题的案例
  D. 使用特定小数储存的案例

五、总结和进一步探讨
  A. 浮点数精度问题的影响范围
  B. 其他解决浮点数精度问题的方法
  C. 未来浮点数技术的发展方向


文章正文:
一、浮点数的储存机制

浮点数是计算机中用于表示实数的一种数据类型。浮点数的表示方法通常采用科学计数法,即将一个实数表示为尾数和指数的乘积的形式。在计算机中,浮点数的储存结构一般分为三部分:符号位、指数位和尾数位。符号位用于表示正负,指数位用于表示小数点的位置,尾数位用于表示实际的数值。

二、浮点数精度问题的原因

浮点数的精度问题主要是由于浮点数的有限精度和储存结构导致的精度损失。浮点数的有限精度意味着无法无限地表示一个实数,在表示大范围的数时,会出现精度丢失的情况。而储存结构导致的精度损失则是由于浮点数的尾数位有限,不能准确表示某些小数。

三、解决浮点数精度问题的方法

为了提高浮点数的精度,可以采取以下几种方法:
A. 使用双精度浮点数:将32位的单精度浮点数转换成64位的双精度浮点数,可以提高浮点数的精度。
B. 放大再缩小:将需要进行精确计算的小数放大一定倍数,进行计算后再缩小回原来的大小,就可以避免精度损失。
C. 使用特定的小数进行储存:选择以1/2^n的小数进行储存,可以在有限的位数中表示完整的数据,避免精度问题。

四、实际案例分析与应用

下面通过实际案例来进一步探讨浮点数精度问题的解决方法。
A. 浮点数相加得到不准确结果的案例:举例说明浮点数相加可能得到不准确结果的情况,并分析其原因。
B. 使用双精度浮点数提高精度的案例:通过将单精度浮点数转换成双精度浮点数,展示提高精度的效果。
C. 放大再缩小解决精度问题的案例:以0.01相加1000次为例,展示放大再缩小的解决方法。
D. 使用特定小数储存的案例:选择以1/8为基数储存小数,观察是否能够避免精度问题。

五、总结和进一步探讨

浮点数精度问题是计算机科学中的一个重要问题。虽然目前已经有了一些解决方法,但仍然存在一定的局限性。未来,随着计算机技术的不断发展,人们对于浮点数精度问题的解决方法还有很多探索和尝试的空间。除了已经提到的方法外,还可以考虑使用更高精度的数据类型,以及改进浮点数的储存结构等方面来提高浮点数的精度。

综上所述,浮点数精度问题是计算机科学中常见的一个问题,但通过合适的解决方法,可以在一定程度上提高浮点数的精度。在实际应用中,根据具体情况选择合适的解决方法是非常重要的。希望以上内容对大家了解浮点数精度问题有所帮助,并促进对该问题的深入研究和讨论。
                                                                                                                                                                                                                                                 以上内容来自  AI机器人,如需继续对话,则在此回答下“点击回复” 或者 在提问时  “@机器人”!禁止 "黄赌毒及政治敏感",违者封号,严重者 提交 网警公安部门。本站不对内容真实性负责,AI机器人有时候会乱说一通……
回复

使用道具 举报

data/attachment/temp/202212/30/133743h8cd9z14sjs84kaz.png_thumb.jpg 共31章节616课时

【全科班】汇川中型PLC从0到1就业班(Codesys系统化全科班课程-600节+)-汇川PLC教程

朱子文

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/VMdEZiqp3BMkbBIlMRRD.png 共9章节44课时

【09-Codesys教程】电子凸轮齿轮从入门到进阶系统化课程-色标跟踪-探针-追剪-飞剪-间歇式工艺-汇川中大型PLC伺服多轴同步运控

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240217/v39r666Z663eBBGKErRm.png 共30章节630课时

【全科班】汇川技术H5U从0到1就业班(系统化全科班-600节+)

张汉清

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240207/HlL5SWHry9lPVdqC8i59.png 共5章节63课时

【01-Codesys教程】ST文本从0到1,从入门到进阶-汇川中大型PLC教程

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240227/AMo32PcbJeIMJBT3m8Pu.png 共4章节36课时

03 中大型ST文本结合仿真软件小项目 31节-气缸功能块封装-状态机编程思路-小设备框架

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Fu5pu34pPcTpu0La443P.png 共6章节52课时

【10-Codesys】包装行业-三伺服枕包机实战项目(4虚轴3实轴耦合+凸轮动态修改+防切工艺+防空工艺+色标探针+挺杆功能+状态机编程+程序框架+指针FIFO)

朱子文

¥ 899.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Su1ibr3I77yl78DLBR7D.png 共4章节29课时

【12-Codesys小课】中大型PLC-PID控制器算法从入门到进阶之液位控制系统

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/Cz3hqDmDD8qHfT3MDm4m.png 共3章节30课时

【05-Codesys教程】汇川中大型PLC单轴运动控制教程-汇川PLC教程

朱子文

¥ 399.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/gXpEpJ8Qb78eD5lDqlnQ.png 共3章节25课时

【06-Codesys教程】汇川中大型PLC运动控制进阶篇(多轴PTP)-编程框架与编程模板实操

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/e39s63ppg54Q2s5H33H9.png 共3章节24课时

【08-codesys教程】汇川中大型codesys教程-多轴运控扩展篇经验分享小知识分享

朱子文

¥ 299.00
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

data/attachment/temp/202212/30/133743h8cd9z14sjs84kaz.png_thumb.jpg 共31章节616课时

【全科班】汇川中型PLC从0到1就业班(Codesys系统化全科班课程-600节+)-汇川PLC教程

朱子文

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/VMdEZiqp3BMkbBIlMRRD.png 共9章节44课时

【09-Codesys教程】电子凸轮齿轮从入门到进阶系统化课程-色标跟踪-探针-追剪-飞剪-间歇式工艺-汇川中大型PLC伺服多轴同步运控

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240217/v39r666Z663eBBGKErRm.png 共30章节630课时

【全科班】汇川技术H5U从0到1就业班(系统化全科班-600节+)

张汉清

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240207/HlL5SWHry9lPVdqC8i59.png 共5章节63课时

【01-Codesys教程】ST文本从0到1,从入门到进阶-汇川中大型PLC教程

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240227/AMo32PcbJeIMJBT3m8Pu.png 共4章节36课时

03 中大型ST文本结合仿真软件小项目 31节-气缸功能块封装-状态机编程思路-小设备框架

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Fu5pu34pPcTpu0La443P.png 共6章节52课时

【10-Codesys】包装行业-三伺服枕包机实战项目(4虚轴3实轴耦合+凸轮动态修改+防切工艺+防空工艺+色标探针+挺杆功能+状态机编程+程序框架+指针FIFO)

朱子文

¥ 899.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Su1ibr3I77yl78DLBR7D.png 共4章节29课时

【12-Codesys小课】中大型PLC-PID控制器算法从入门到进阶之液位控制系统

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/Cz3hqDmDD8qHfT3MDm4m.png 共3章节30课时

【05-Codesys教程】汇川中大型PLC单轴运动控制教程-汇川PLC教程

朱子文

¥ 399.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/gXpEpJ8Qb78eD5lDqlnQ.png 共3章节25课时

【06-Codesys教程】汇川中大型PLC运动控制进阶篇(多轴PTP)-编程框架与编程模板实操

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/e39s63ppg54Q2s5H33H9.png 共3章节24课时

【08-codesys教程】汇川中大型codesys教程-多轴运控扩展篇经验分享小知识分享

朱子文

¥ 299.00

到"π³ 实操派",学PLC就是快!汇川PLC及Codesys培训

项目实战 手把手教学 微信&电话 15850116008
超600节系统化课程,汇川优秀自动化讲师亲授!学一门Codesys,玩800家PLC仅剩少量名额
点击免费试听

到实操派,学PLC就是快!

扫码领取工控文库VIP

钻石VIP先到先得

服务电话 & 微信:9:00-22:00

15850116008

苏州实操派科技有限公司

公司地址:江苏省苏州市吴中区越溪街道天鹅荡路5号31B13

Copyright © 苏州实操派科技有限公司 2022 到实操派,学PLC就是快!工业自动化业务培训适用人群:成人 ( 苏ICP备2022021576号-3 )

公司地址:江苏省苏州市吴中区越溪街道天鹅荡路5号31B13

返回顶部