兰州最好的网站建设公司哪家好,上海 网站设计 排名,定制衣服的软件app,网站推广专业术语1.前言
浮点值的存储、运算都可能会带来精度损失#xff0c;了解精度损失背后的机制原因方便我们更好的了解什么情况下会发生精度损失、什么情况下精度损失较大#xff0c;以及思考怎么避免或减少精度损失。
2.知识点
#xff08;1#xff09;IEEE 754标准
EEE 754标准…1.前言
浮点值的存储、运算都可能会带来精度损失了解精度损失背后的机制原因方便我们更好的了解什么情况下会发生精度损失、什么情况下精度损失较大以及思考怎么避免或减少精度损失。
2.知识点
1IEEE 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博客