float不断增加时不会溢出变负数,只会变PositiveInfinity
float最大值
即float.MaxValue,二进制为:0(111 1111 0)(111 1111 1111 1111 1111 1111)。
转为10进制:
1)符号位(31位)
0,即正数
2)求出指数(23~30位)
指数=指数部分的值-127:0b1111 1110 - 127 = 254 - 127 = 127
3)尾数转小数:首位补1(为了节省空间,转换时去掉了首位的1,还原时需要补回来)
1.111 1111 1111 1111 1111 1111
4)拼接小数和指数,即用科学计数法表示:
1.111 1111 1111 1111 1111 1111*(2127)
即小数点右移127位:1111 1111 1111 1111 1111 1111*2104
最终结果为:(224-1)*2104
float.MaxValue再加多少变为加多少会变成Infinity?
就是要让后面23个bit进1,变成0(111 1111 1)(000 0000 0000 0000 0000 0000)
1) 加上下面的数b是否会变成Infinity?
a = 0(111 1111 0)(111 1111 1111 1111 1111 1111),则Sa = 0, Ea = 111 1111 0, Ma = 1.111 1111 1111 1111 1111 1111
b = 0(111 0011 0)(000 0000 0000 0000 0000 0000),则Sb = 0, Eb = 111 0011 0, Mb = 1.000 0000 0000 0000 0000 0000
1-a) 对阶
Ea比Eb大,所以Eb按Ea对齐,Mb小数点左移24位。对阶后:
Eb = 111 1111 0
Mb = 0.(00000000 00000000 0000000)1,最后1个bit超出23bit,先放到一边后续会用于舍入处理,然后对尾数截断
截断后 Mb = 0.00000000 00000000 0000000
1-b) 尾数相加
Ma + Mb = 1.111 1111 1111 1111 1111 1111
1-c) 规格化结果
结果还是23bit,无需做相关处理
1-d) 舍入处理
步骤1)中,超出的1个bit为1,这边要进1。进位后:
Mb = 10.000 0000 0000 0000 0000 0000
1-e) 最终结果
S = 0, E = 111 1111 1, M = 0.000 0000 0000 0000 0000 0000
即:0(111 1111 1)(0000000 00000000 00000000) = PositiveInfinity
2) 再试下比b小1的数c
c = 0(111 0010 1)(111 1111 1111 1111 1111 1111),则Sc = 0, Ec = 111 0010 1, Mc = 1.111 1111 1111 1111 1111 1111
2-a) 对阶
Ea比Ec大,所以Ec按Ea对齐,Mb小数点左移25位。对阶后:
Ec = 111 1111 0
Mc = 0.(00000000 00000000 0000000)0 1111 1111 1111 1111 1111 1111,最后25个bit超出23bit,先放到一边后续会用于舍入处理,然后对尾数截断
截断后 Mc = 0.00000000 00000000 0000000
2-b) 尾数相加
Ma + Mc = 1.111 1111 1111 1111 1111 1111
2-c) 规格化结果
结果还是23bit,无需做相关处理
2-d) 舍入处理
步骤1)中,超出的25个bit会用于舍入处理,0 1111 1111 1111 1111 1111 1111没有超过1 1111 1111 1111 1111 1111 1111的一半,所以舍掉
2-e) 最终结果
S = 0, E = 111 1111 0, M = 1.111 1111 1111 1111 1111 1111
即:0(111 1111 0)(1111111 11111111 11111111) ,还是最大值
参考
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端