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

老学童

  • 帖子

    782
  • 精华

    32
  • 被关注

    67

论坛等级:奇侠

注册时间:2011-06-22

黄金 黄金 如何晋级?

发布于 2014-05-08 13:57:25

8楼

quote:以下是引用Automann在2014-05-07 13:25:36的发言:
2147483647.0 ~ 2147483520.0都是合法的浮点数。最大的浮点数10的38次方还要多。

廖老师,
正如您在很多帖子中指出的,累加器是不分数据类型的,因此,当最大的正值浮点数01111111111111111111111111111111读入累加器后,不是当作浮点数来处理,即01111111111111111111111111111111 = 2147483647(按照浮点数格式01111111111111111111111111111111 = 2^128 * 1.99999988079071044921875 = 6.8056469327705771962340836696903e+38),因此,CPU内部将累加器内部的01111111111111111111111111111111作为有符号双整数转换成浮点数格式(2147483520即16#4EFFFFFF,见3楼仿真图片),然后再RND,由于2147483520的底数全部为1,如果继续加大,只能指数进位,即2^31 *1 = 2147483648大于2147483647(32位有符号双整数最大正值),这样就会造成溢出。
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54768条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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