回复:一个神秘现象后面的秘密──RND指令执行出错的原因分析

老学童

  • 帖子

    765
  • 精华

    32
  • 被关注

    64

论坛等级:奇侠

注册时间:2011-06-22

钻石 钻石 如何晋级?

发布于 2014-05-09 00:25:24

14楼

廖老师,
其实我已经似乎明白这个道理,就是说不出来!

2147483520是个非常特殊的值(见2楼计算),此时,指数= 157-127 = 30,底数=2#11111111111111111111111,如果继续加大浮点数的值,只能指数进位,而将底数清零,即,指数 = 158 -127 = 31,底数=2#00000000000000000000000,这就是为什么您在一楼得出结论:
“...大于2147483456.0 ~ 2147483584.0时(区间范围为128.0),转换后得到的双整数均为2147483520"。

假如真的指数进位,底数清零,那就会出现:(Sign)*(1.f)*(2e-127) = 2^31*1.0 = 2147483648.0,超出了有符号双整数范围了!

我知道单精度32位浮点数有效位7位,双整数10位,但是,我一直是从浮点数二进制格式来分析这个问题的。

浮点数不是数学中的实数,是用2^0 + 2^-1 + 2^-2 + 2^-3 + 2^-4 + 2^-5 + 2^-6 + 2^-7 + 2^-8 + 2^-9 + 2^-10 + 2^-11 + 2^-12 + 2^-13 + 2^-14 + 2^-15 + 2^-16 + 2^-17 + 2^-18 + 2^-19 + 2^-20 + 2^-21 + 2^-22 + 2^-23
这些所谓底数“拼”出来的,所以实数是连续的,而浮点数会出现“断点”(误差)!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。