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) ,还是最大值

 

参考 

大整数计算器 - 长整数计算器

C#浮点数的表示和基本运算_C#教程_脚本之家

 

posted @   yanghui01  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示