浮点数float的范围分析有疑惑

C语言 码拜 7年前 (2015-11-16) 757次浏览
浮点数float的表现方式为
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S:符号位
E:阶码
M:尾数(默认前面会加1.尾数)
按本人个人理解:
float的最大绝对值:0111  1111  1111  1111 1111 1111 1111  1111 
即              + (1.1..1)  *      (2^128)    ≈   1  *  (2^129)  –  1   ≈    6.8 * 10^38
但是书上说的是:
                                                              ≈   1  *  (2^128)   – 1  ≈    3.4 * 10^38
float的最小绝对值:0000  0000  0000  0000  0000 0000 0000 0001
即              +(1.0..01)  *    (2^-127)   ≈    1  *  (2^-127)       ≈     5.877  *  10^-39
但是书上说的是:
                                                             ≈     1  * (2^-149)       ≈     1.4 *  10^-45
现在本人不清楚本人错在哪里了.
解决方案:45分
1) 指数部分 FF 被用来表示 Infinity (无穷大)。正常数字指数部分只到 FE 。
2) 指数部分 00 用来 0.0, -0.0 和 denormalized number 。denormalized number 表示方法与其它正常数字不同,即它开始的一位并不是一个隐含的1,而是0.
+(0.0..01)  *    (2^-127)   ≈    1  *  (2^-149)
解决方案:45分
问题在于阶码不能全为1, 全为1用于特殊用途, 尾数0则为INF, 不为0则为NAN
float 最大时阶码为127, 尾数全1, 应该就是2^127*(二进制小数)(1.1111…(小数点后23位1) 略接近于2^128

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明浮点数float的范围分析有疑惑
喜欢 (0)
[1034331897@qq.com]
分享 (0)