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。