浮点型精度理解及存储原理理解
来源:互联网 发布:网络割接是什么意思 编辑:程序博客网 时间:2024/06/06 03:20
float 类型精度6到7位
double 类型精度15到16位
可能会有人会比较疑惑,我们慢慢分析。
首先解释下为什么叫浮点型
我们常常用,确容易被忽略的问题,明白这个,计算浮点型的精度和最小小数就简单了。
Ⅰ .简答原理
1.浮点型即为小数点可以浮动的数据类型
2.通俗的来讲就是2进制的科学计数法。所以浮点型有科学计数法的优点和缺点。
解释1:
什么是小数点浮动?
有小数点浮动 必然有小数点不浮动的数据类型。小数点不浮动就是约定了前多少位存储整数,后多少位存储小数。而浮动型即为固定的存储一个小数,同时用另外的空间记录小数点偏移的值。
解释2:
科学计数法更够更充分的利用存储空间,能够表示更大的数或者更小的小数。缺点是并不是直观的数,需要计算。
Ⅱ.下面具体分析浮点型:
以32位float类型为例
2进制的科学计数法
±(小数)×2ⁿ
32位 分成3个部分 即 (正负号:1位)(指数n:8位)(小数部分:23位)
1.正负号:1为负 0为正
2.指数部分:偏移值为127 及取值范围为 -127 -- +128
3.小数部分:隐藏了首位1
例如 1.10.25 = 1*2³ + 0*2² + 1*2¹ + 0*2º + 0*2^(-1) + 1*2^(-2)
2.所以以2进制表示为:1010.01
3.进制的科学计数法表示为:1.01001*2^3
4.指数位:因为偏移值为127 所以指数为取127+3=130即:01000110
5.小数位:去掉首位1 即:01001 后位补零:0100 1000 0000 0000 000
6.结果:0 01000110 0100 1000 0000 0000 000
一些解释:
为什么去掉首位的1呢?
使用特殊值
当指数位为-127 或 128 及0000 0000 或 1111 1111
的时候不进行上述运算
1.指数位为-127的时候 指数仍以-126计算,小数部分首位不再补1
即 (0或1)+(0)+(0)=0
(0或1)+(0)+(小数)=(±)该小数*2^(-126)
(这样做有一个好处,即形成的渐进式下溢出,即0与绝对值最小数之间的距离==最小数与第二小数之间的距离(2^-23 * 2^-126),使得两个不相等的浮点数相减不等于0,在这之前绝对值最小的三个数依次为:0, 2^-126, 2^-126+2^-23*2^-126,所以两个不相等的浮点数差值可能为0)
2.指数为:127的时候
(0或1)(127)(0)==(正/负)无穷
(0或1)(127)(大于0)==NAN(标记为不是数字)
所以float类型精度为 2^-23 = 1.1920928955078 * 10 -7 所以大约在换算到10进制6到7位之间
注:1.精度不是指最小值(参考科学计数法),大于0的最小值为2^-23 * 2^-126
2.精度在2进制中的表示准确为23位,1.1920928955078 * 10 -7 是它的小数部分最小值之间的差值,即为精度
double 类型精度15到16位
可能会有人会比较疑惑,我们慢慢分析。
首先解释下为什么叫浮点型
我们常常用,确容易被忽略的问题,明白这个,计算浮点型的精度和最小小数就简单了。
Ⅰ .简答原理
1.浮点型即为小数点可以浮动的数据类型
2.通俗的来讲就是2进制的科学计数法。所以浮点型有科学计数法的优点和缺点。
解释1:
什么是小数点浮动?
有小数点浮动 必然有小数点不浮动的数据类型。小数点不浮动就是约定了前多少位存储整数,后多少位存储小数。而浮动型即为固定的存储一个小数,同时用另外的空间记录小数点偏移的值。
解释2:
科学计数法更够更充分的利用存储空间,能够表示更大的数或者更小的小数。缺点是并不是直观的数,需要计算。
Ⅱ.下面具体分析浮点型:
以32位float类型为例
2进制的科学计数法
±(小数)×2ⁿ
32位 分成3个部分 即 (正负号:1位)(指数n:8位)(小数部分:23位)
1.正负号:1为负 0为正
2.指数部分:偏移值为127 及取值范围为 -127 -- +128
3.小数部分:隐藏了首位1
例如 1.10.25 = 1*2³ + 0*2² + 1*2¹ + 0*2º + 0*2^(-1) + 1*2^(-2)
2.所以以2进制表示为:1010.01
3.进制的科学计数法表示为:1.01001*2^3
4.指数位:因为偏移值为127 所以指数为取127+3=130即:01000110
5.小数位:去掉首位1 即:01001 后位补零:0100 1000 0000 0000 000
6.结果:0 01000110 0100 1000 0000 0000 000
一些解释:
为什么去掉首位的1呢?
因为除了0,首位都是1.
使用特殊值
当指数位为-127 或 128 及0000 0000 或 1111 1111
的时候不进行上述运算
1.指数位为-127的时候 指数仍以-126计算,小数部分首位不再补1
即 (0或1)+(0)+(0)=0
(0或1)+(0)+(小数)=(±)该小数*2^(-126)
(这样做有一个好处,即形成的渐进式下溢出,即0与绝对值最小数之间的距离==最小数与第二小数之间的距离(2^-23 * 2^-126),使得两个不相等的浮点数相减不等于0,在这之前绝对值最小的三个数依次为:0, 2^-126, 2^-126+2^-23*2^-126,所以两个不相等的浮点数差值可能为0)
2.指数为:127的时候
(0或1)(127)(0)==(正/负)无穷
(0或1)(127)(大于0)==NAN(标记为不是数字)
所以float类型精度为 2^-23 = 1.1920928955078 * 10 -7 所以大约在换算到10进制6到7位之间
注:1.精度不是指最小值(参考科学计数法),大于0的最小值为2^-23 * 2^-126
2.精度在2进制中的表示准确为23位,1.1920928955078 * 10 -7 是它的小数部分最小值之间的差值,即为精度
阅读全文
1 0
- 浮点型精度理解及存储原理理解
- 单精度浮点(32bit float)与半精度浮点(16bit)的理解及开根号求倒数算法
- 【深入理解计算机系统】【浮点数精度例子】
- 单精度、双精度浮点存储表示及精度丢失问题
- 单精度,双精度浮点存储表示
- 单精度,双精度浮点存储表示
- 浮点型精度分析
- 理解Android的精度
- XSS漏洞原理及理解
- Autoreleasepool的理解及原理
- Spark 原理及RDD理解
- spring 原理及自己理解
- 浮点数存储原理
- 单精度与双精度浮点型
- 浮点数理解梳理
- 浮点数的理解
- 浮点数的理解
- 深入理解浮点数
- (三) java并发编程--线程的安全性
- vim添加python3支持与设置。
- 八、python中的函数
- CCF 201609-2 火车购票
- 17.11.19日报
- 浮点型精度理解及存储原理理解
- android 開發常用的工具整理(整理中)
- InnoDB MVCC 要点摘录
- 从源码角度讲讲我对Android和Unity的热更so的理解
- ubuntu下搭建php(tp3.2框架)
- 【字符串处理】说反话
- 数据库索引类型及原理记要
- 《pandas入门》之基本数据结构
- 写了个类似TreeGrid的控件