您的位置:首页 > 其它

浮点型精度理解及存储原理理解

2017-11-19 00:35 246 查看
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呢?

因为除了0,首位都是1. 

那0怎么表示?

使用特殊值

当指数位为-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 是它的小数部分最小值之间的差值,即为精度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息