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

Automann

  • 帖子

    6168
  • 精华

    138
  • 被关注

    308

论坛等级:至圣

注册时间:2004-12-23

普通 普通 如何晋级?

发布于 2014-05-08 21:57:32

10楼

quote:以下是引用老学童在2014-05-08 13:57:25的发言:
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位有符号双整数最大正值),这样就会造成溢出。

我的实验输入的都是浮点数,例如2147483647.0,而不是输入双整数2147483647。16#4EFFFFFF是用十六进制格式显示的浮点数2147483584.0。
01111111111111111111111111111111不是16#4EFFFFFF。
追求完美
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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