当前位置: 首页 > news >正文

涿州网站建设临沂seo公司

涿州网站建设,临沂seo公司,代码级优化wordpress,温州公司网站建设1.前言 浮点值的存储、运算都可能会带来精度损失,了解精度损失背后的机制原因方便我们更好的了解什么情况下会发生精度损失、什么情况下精度损失较大,以及思考怎么避免或减少精度损失。 2.知识点 (1)IEEE 754标准 EEE 754标准…

1.前言

浮点值的存储、运算都可能会带来精度损失,了解精度损失背后的机制原因方便我们更好的了解什么情况下会发生精度损失、什么情况下精度损失较大,以及思考怎么避免或减少精度损失。

2.知识点

(1)IEEE 754标准

EEE 754标准(电气和电子工程师协会,简称IEEE)是目前通用的浮点数表示规范,它为单精度(float)、双精度(double)和扩展精度(如long double)浮点数定义了一套标准化的二进制编码方案。

根据该标准,浮点数可以表示为:

如5.5=

(2)二进制排列规则

IEEE754 单精度(32位)的二进制排列规则:符号位S(1位,0为正数,1为负数) + 阶码E(8位)  + 尾数M(23位)。

IEEE754 双精度(64位)的二进制排列规则:符号位S(1位,0为正数,1为负数) + 阶码E(11位)  + 尾数M(52位)。

(3)阶码偏置

为了将阶码转换为无符号整数,以简化硬件实现,同时避免阶码出现特殊值0和255,设计了阶码偏置的规则。
单精度的偏置常数为127(固定值),即阶码 = 127 + 阶(左移为正数,右移为负数)。

双精度的偏置常数为1023(固定值),即阶码 = 1023 + 阶(左移为正数,右移为负数)。

根据上述知识点,float值的二进度排列如下图所示:

 3. 示例

 为方便理解,我们以float值98.204590为例进行二进制存储的说明。

步骤①:将整数部分整除以2,取余数部分倒序排列

98 / 2 = 49 余 0

49 / 2 = 24 余 1

24 / 2 = 12 余 0

12 / 2 = 6 余 0

6 / 2 = 3 余 0

3 / 2 = 1 余 1

1 / 2 = 0 余 1

整数部分二进制为:1100010。

步骤②:将小数部分乘以2,取商的整数部分正序排列( 一直乘 2 ,遇到 1 退出;如果乘 2 之后的数字大于 1,则减去 1 

根据上述排列可知,尾数可以取23位,但由于小数点前面的1.不用显式表示,这样可以取24位,由于上面整数部分占据了7位,这样小数部分取17位:00110100011000000。

这样98.204590表示为:1100010.00110100011000000

0.204590 * 2 = 0.40918  商的整数部分0

0.40918 * 2 = 0.81836  商的整数部分0      

0.81836 * 2 = 1.63672  商的整数部分1

0.63672 * 2 = 1.27344  商的整数部分1

0.27344 * 2 = 0.54688  商的整数部分0

0.54688 * 2 = 1.09376  商的整数部分1

0.09376 * 2 = 0.18752  商的整数部分0

0.18752 * 2 = 0.37504  商的整数部分0

0.37504 * 2 = 0.75008  商的整数部分0

0.75008 * 2 = 1.50016  商的整数部分1

0.50016 * 2 = 1.00032  商的整数部分1

0.00032 * 2 = 0.00064  商的整数部分0

0.00064 * 2 = 0.00128  商的整数部分0

0.00128 * 2 = 0.00256  商的整数部分0

0.00256 * 2 = 0.00512  商的整数部分0

0.00512 * 2 = 0.01024  商的整数部分0

0.01024 * 2 = 0.02048  商的整数部分0

0.02048 * 2 = 0.04096  商的整数部分0

0.04096 * 2 = 0.08192  商的整数部分0

步骤③:小数点向左移,直到整数部分为1

1100010.00110100011000000处理后为1.10001000110100011000000 * 2^6

阶为6,偏置127即133,占8位为:1000 0101

步骤④:根据数值的正负定义符号位

由于数值为正,所以符号位S为0。

步骤⑤:根据知识点一进行数值组装

此二进制值为98.20458984375,意味着在二进制表示和存储阶段即有精度损失了。
 

4.精度相关话题

4.1. 存在一个浮点常量,其他浮点值加上它之后小数点后值不变吗?

不存在,在计算机中浮点值相加并不是简单的整数+整数,小数+小数,其结果在转为二进制存储阶段也有可能会继续损失精度。

有些情况下我们可能需要把浮点值偏置处理为某个范围再继续进行应用,这种处理很可能会带来精度损失。

4.2. 尽量减少浮点数据的处理和运算

尽量减少浮点数据的处理和运算,每次运算都可能会损失精度,在有些算法计算中尽量采用逻辑清晰简便的处理过程,减少精度损失。如求向量夹角,需要尽量简化运算过程,以保持较高的结果精度。想想为什么公式推导很重要?化繁为简!便于应用。

4.3. 尽量减少溢出运算

每次溢出都会损失精度,在数学类的计算或几何算法中是一个绕不开的话题。后续博主可能会开一个系列讲几何算法中提高精度的一些经验措施。

4.4. 关注浮点值的标识范围           

关注浮点值的标识范围,避免超出范围的计算处理,如果可能超出范围则用更高范围和精度的类型或采用其他处理办法。   

想想为什么4字节float表示范围约为

我们看看阶码,阶码为8位,由阶偏置127得到,这样阶最大为

也就是上述范围。

5. 参考文章

1、二进制转换网站:

IEEE 754 浮点数转换 - 锤子在线工具

 2、浮点数的二进制表示

浮点数的二进制表示_浮点 二进制-CSDN博客

3、大白话说float型的精度和范围

大白话说float型的精度和范围_float范围值的大小-CSDN博客

4、 float的精度和取值范围

float的精度和取值范围_float精度-CSDN博客

5、浅谈C/C++的浮点数在内存中的存储方式

http://t.csdnimg.cn/9xzXI
浅谈C/C++的浮点数在内存中的存储方式-CSDN博客

6、C++/C--浮点型数据的二进制表示及其内存存储形式

C++/C--浮点型数据的二进制表示及其内存存储形式_c++输出浮点数的二进制形式-CSDN博客

7、深入理解浮点数:阶码为什么要加上偏移量等4个问题

深入理解浮点数:阶码为什么要加上偏移量等4个问题_阶码为什么加127-CSDN博客

8、计算机组成原理:浮点数的加、减、乘、除运算(含实例完整运算) 

计算机组成原理:浮点数的加、减、乘、除运算(含实例完整运算)_浮点数运算-CSDN博客 

http://www.hkea.cn/news/979609/

相关文章:

  • 专门做宠物食品的网站市场调研怎么做
  • 兰州网站建设q.479185700棒成年s8视频加密线路
  • 付费网站推广seo关键词排名优化怎么收费
  • 网站由那些组成google网页搜索
  • 对一个网站做性能测试谷歌paypal官网入口
  • 北京住房投资建设中心网站首页快速排名怎么做
  • 中国网站制作 第一个佛山网站优化
  • thinkphp做的教育网站微商引流推广
  • 做特卖网站手机版电商最好卖的十大产品
  • 怎样做网站平叿trinseo公司
  • 北京大兴最专业的网站建设公司如何推广一个项目
  • 网页设计最牛的网站建设宁波网站优化公司哪家好
  • 建设通查询如何做网站推广及优化
  • 城乡建设网站首页百度seo收录软件
  • 永久免费建个人网站培训网站建设
  • 如何使用jq做弹幕网站好用的磁力搜索引擎
  • 南充营销型网站建设高端品牌网站建设
  • 制作小程序和网站的公司搜狗收录提交入口网址
  • 手机站电影基础建站如何提升和优化
  • 江苏 网站备案百度贴吧官网app下载
  • 网站制作三站湖南网站seo公司
  • 简单做任务赚钱网站企业管理培训课程报名
  • 零点研究咨询集团官方网站建设相似图片在线查找
  • 网站开发需要什么软件关键词app
  • 360全景网站建设做了5天游戏推广被抓了
  • 政府网站建设经验典型材料河源今日头条新闻最新
  • 为什么要进行网站备案佛山市人民政府门户网站
  • 摄影网站开发背景百度app交易平台
  • 吉林网站建设石家庄百度快照优化排名
  • 大学生网站开发总结报告app推广接单发布平台