浮点数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
现在本人不清楚本人错在哪里了.
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)
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
float 最大时阶码为127, 尾数全1, 应该就是2^127*(二进制小数)(1.1111…(小数点后23位1) 略接近于2^128