关于浮点数和IEEE754的理解
2013-04-29 20:21
260 查看
㈠关于浮点数和IEEE754的理解
⑴在此之前先了解二/八/十六进制与十进制的转换方法和数值数据在计算机内的表示方式和编码
⑵二/八/十六进制与十进制数的转换方法和相互之间的转换(整数部分取余和小数部分取整)
⑶定点数(定点整数和定点小数)和浮点数
⑷信息的存储方式和码制(原码,反码,补码,移码)
㈡浮点数的表示和IEEE754标准
⑴浮点数
一般二进制实数在计算机内的表示:N=2^E * F
|阶符|阶码|数符|尾数|
⑵规格化
阶码通常为带符号的纯整数,尾数为带符号的纯小数,
很明显,通过小数点的移位可以用多种浮点形式表示同一个数,
阶码决定范围,尾数决定精度,为了充分利用尾数来表示更多的有效数字,就需要规格化.
规格化就是将尾数的绝对值限定在区间[0.5,1),即尾数的最高位为1,即0.1xxx...x
⑶当尾数用补码表示的时候:
若尾数M>=0,则其规格化的尾数形式为: M=0.1xxx...x,区间[0.5,1)
若尾数M< 0,则其规格化的尾数形式为: M=1.0xxx...x,区间[-1,-0.5)
(*:其中小数点左边的一位数为符号位,补码的补码为其原码)
㈢IEEE754标准
详见wiki百科: https://zh.wikipedia.org/wiki/IEEE_754
在这里特此强调在其标准中:
⑴浮点数被重新分成了三个部分:|数符S|指数E|尾数F(按上面的来说,就是尾数的小数部分)|.
float和double对应的位数分别为:1,8,23和1,11,52
⑵为了指数E的大小比较和对阶方便,同时可以省去阶符,加上偏移值2^E-1 - 1.(32/64位精度浮点的偏移值分别为:127/1023)
由于8位和11位指数域对应的无符号数的值的范围分别是[0,255]和[0,2047],而除去特殊值的全0和全1指数,则真正的指数取值范围分别是[-126,127]和[-1022,1023]
⑶规格形式的浮点数:
①通常一个浮点数规格化之后的尾数为0.1xxx...x,
②这里为了进一步提高精度,将小数点再向右移一位,将其变成1.xxx...x,并将"1"隐含,所以实际中32位浮点的有效位数为23+1=24位,
(*:这里指数部分的编码值在 0< exponent< 2^E - 1,即除去特殊值的全0和全1指数)
⑷非规格形式的浮点数:
这里必须理解 突然式下溢出(abrupt underflow) 和 渐进式下溢出(gradual underflow) (wiki上有详细说明)
然后就会明白为什么会有特殊值及以下几点:
①指数域全0的时候,其实际指数值为-126,而不是-127,更重要的是尾数再次变成了0.111...11~0.000...01,而不是1.xxx...x
②[0,2^-126] 和 [2^-126,2^-125] 两个区间的浮点数密集程度是一样的(区间范围相同且浮点个数均为2^23个),精度为:2^-126 * 2^-23 = 2^-149,
==============================================================
以下链接供参考用:
/article/7150941.html
/article/6913182.html(这个4.1节里是错的,)
/article/7777493.html
http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html
附上:
单精度浮点数各种极值情况:
⑴在此之前先了解二/八/十六进制与十进制的转换方法和数值数据在计算机内的表示方式和编码
⑵二/八/十六进制与十进制数的转换方法和相互之间的转换(整数部分取余和小数部分取整)
⑶定点数(定点整数和定点小数)和浮点数
⑷信息的存储方式和码制(原码,反码,补码,移码)
㈡浮点数的表示和IEEE754标准
⑴浮点数
一般二进制实数在计算机内的表示:N=2^E * F
|阶符|阶码|数符|尾数|
⑵规格化
阶码通常为带符号的纯整数,尾数为带符号的纯小数,
很明显,通过小数点的移位可以用多种浮点形式表示同一个数,
阶码决定范围,尾数决定精度,为了充分利用尾数来表示更多的有效数字,就需要规格化.
规格化就是将尾数的绝对值限定在区间[0.5,1),即尾数的最高位为1,即0.1xxx...x
⑶当尾数用补码表示的时候:
若尾数M>=0,则其规格化的尾数形式为: M=0.1xxx...x,区间[0.5,1)
若尾数M< 0,则其规格化的尾数形式为: M=1.0xxx...x,区间[-1,-0.5)
(*:其中小数点左边的一位数为符号位,补码的补码为其原码)
㈢IEEE754标准
详见wiki百科: https://zh.wikipedia.org/wiki/IEEE_754
在这里特此强调在其标准中:
⑴浮点数被重新分成了三个部分:|数符S|指数E|尾数F(按上面的来说,就是尾数的小数部分)|.
float和double对应的位数分别为:1,8,23和1,11,52
⑵为了指数E的大小比较和对阶方便,同时可以省去阶符,加上偏移值2^E-1 - 1.(32/64位精度浮点的偏移值分别为:127/1023)
由于8位和11位指数域对应的无符号数的值的范围分别是[0,255]和[0,2047],而除去特殊值的全0和全1指数,则真正的指数取值范围分别是[-126,127]和[-1022,1023]
⑶规格形式的浮点数:
①通常一个浮点数规格化之后的尾数为0.1xxx...x,
②这里为了进一步提高精度,将小数点再向右移一位,将其变成1.xxx...x,并将"1"隐含,所以实际中32位浮点的有效位数为23+1=24位,
(*:这里指数部分的编码值在 0< exponent< 2^E - 1,即除去特殊值的全0和全1指数)
⑷非规格形式的浮点数:
这里必须理解 突然式下溢出(abrupt underflow) 和 渐进式下溢出(gradual underflow) (wiki上有详细说明)
然后就会明白为什么会有特殊值及以下几点:
①指数域全0的时候,其实际指数值为-126,而不是-127,更重要的是尾数再次变成了0.111...11~0.000...01,而不是1.xxx...x
②[0,2^-126] 和 [2^-126,2^-125] 两个区间的浮点数密集程度是一样的(区间范围相同且浮点个数均为2^23个),精度为:2^-126 * 2^-23 = 2^-149,
==============================================================
以下链接供参考用:
/article/7150941.html
/article/6913182.html(这个4.1节里是错的,)
/article/7777493.html
http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html
附上:
单精度浮点数各种极值情况:
类别 | 正负号 | 实际指数 | 有偏移指数 | 指数域 | 尾数域 | 数值 |
---|---|---|---|---|---|---|
零 | 0 | -127 | 0 | 0000 0000 | 000 0000 0000 0000 0000 0000 | 0.0 |
负零 | 1 | -127 | 0 | 0000 0000 | 000 0000 0000 0000 0000 0000 | −0.0 |
1 | 0 | 0 | 127 | 0111 1111 | 000 0000 0000 0000 0000 0000 | 1.0 |
-1 | 1 | 0 | 127 | 0111 1111 | 000 0000 0000 0000 0000 0000 | −1.0 |
最小的非规约数 | * | -126 | 0 | 0000 0000 | 000 0000 0000 0000 0000 0001 | ±2−23 × 2−126 = ±2−149 ≈ ±1.4×10-45 |
中间大小的非规约数 | * | -126 | 0 | 0000 0000 | 100 0000 0000 0000 0000 0000 | ±2−1 × 2−126 = ±2−127 ≈ ±5.88×10-39 |
最大的非规约数 | * | -126 | 0 | 0000 0000 | 111 1111 1111 1111 1111 1111 | ±(1−2−23) × 2−126 ≈ ±1.18×10-38 |
最小的规约数 | * | -126 | 1 | 0000 0001 | 000 0000 0000 0000 0000 0000 | ±2−126 ≈ ±1.18×10-38 |
最大的规约数 | * | 127 | 254 | 1111 1110 | 111 1111 1111 1111 1111 1111 | ±(2−2−23) × 2127 ≈ ±3.4×1038 |
正无穷 | 0 | 128 | 255 | 1111 1111 | 000 0000 0000 0000 0000 0000 | +∞ |
负无穷 | 1 | 128 | 255 | 1111 1111 | 000 0000 0000 0000 0000 0000 | −∞ |
NaN | * | 128 | 255 | 1111 1111 | non zero | NaN |
* 符号位可以为0或1 . |
相关文章推荐
- 关于浮点数和IEEE754标准的一点理解
- 关于浮点数的误差理解
- 关于IEEE754二进制浮点数算术标准的介绍
- 关于IQMATH和浮点数在DSP的深入理解
- struts 中关于xml配置文件中namespace的理解
- C++ 关于 调用函数时值传递和引用的理解
- java中if判断里关于两个Boolean值等号连接的理解
- 关于 msvbvm60.__vbaVarVargNofree 的一些理解
- 关于synchronized的理解记录
- 学习笔记第一天,关于div+css的理解
- 关于ProxyPass、ProxyPassReverse代理和反向代理的理解
- 一篇关于IDisposable接口的理解
- 关于ARP的一些理解
- Java关于Synchronized关键字在不同位置使用的理解
- 写写本人关于c/c++的引用,指针,虚函数的理解
- 关于js做浮点数加法的问题
- 关于LeetCode中Word Pattern一题的理解
- 关于python装饰器的理解
- 关于CoreData的理解和使用.
- 关于JCT-VC的A033文档的理解(运动表示)