机器浮点数的范围
来源:互联网 发布:安卓修改mac地址软件 编辑:程序博客网 时间:2024/04/30 09:50
最近复习计算机组成原理,看到关于机器浮点数这一块的知识,头有点大,并且对于原码,补码下不同的机器浮点数特别容易弄混,所以在一阵小研究之后,有了自己的一点看法。
1.浮点数的表现形式
浮点数在机器中的形式如下所示:
对于上述的形式的解释:
1.浮点数由阶码j和尾数S两部分组成。
2.阶码是整数,阶符和阶码位数m合起来表示浮点数的表示范围及小数点的实际位置。
3.尾数是小数,其位数n反应了浮点数的精度,尾数的符号
2.浮点数的表示范围
下面将从两个机器数形式介绍下机器浮点数的范围表示:
2.1非规格化下的原码形式浮点数
这种浮点数的二进制数据是原码形式表示。
1.最大正数:最大正数要求阶码为正且足够大,尾数为正且最大,则得以下形式:
这时很容易就得到最大正数为:
2.最小正数:对于浮点数,由于浮点数不考虑为0的情况,所以要得到最小正数,阶码为负且足够小,尾数为正但足够小,则得到以下形式:
得到最小正数为:
3.最大负数:要得到最大负数,则是绝对值最小的负数,保证绝对值最小,则需要阶码为负足够小,尾数足够小,其次由于负数,要求数符
得到最大负数为:-
4.最小负数:要得到最小负数,则是绝对值最大的负数,保证绝对值最小,则需要阶码为正足够大,尾数足够大,其次由于负数,要求数符
得到最小负数为:-
这里我们其实可以很清楚的看到正数和负数的范围其实具有一种对称性,主要是由于相同位数下的机器原码的正负表示范围相对于坐标原点具有一种对称性。
2.2规格化下的原码形式浮点数
对于规格化原码形式浮点数,则是要求尾数的最高位为1。所以在这种要求下,相对于非规格化原码形式浮点数,其最大正数和最小负数不变,仍分别为
发生变化的是最小正数和最大负数,要求尾数最高位为1,此时最小正数的形式为:
得到最小正数为:
同理,最大负数的形式如下:
得到最大负数为: -
2.3规格化下的补码形式浮点数
补码形式下的浮点数范围是比较复杂的,因为涉及原码补码的转化。其次还有个比较重要的点就是规格化下的补码浮点数有个要求,如下:
a. 当尾数S>0时,要求补码规格化形式为:
b. 当尾数S<0时,要求补码规格化形式为:
一句话概括就是尾数第一位要保证与数符
下面将基于上面所说介绍补码下的浮点数范围:
1.最大正数:这个和原码形式下的表示是一样的,形如:
这时很容易就得到最大正数为:
2.最小正数:要求是一样的,保证阶码为负且最小,尾数为正且最小,由于补码形式下,最小负数形式为1,00000…….,所以得规格化补码形式的浮点数的最小正数形如:
这里的阶码转换为原码后真值为:
3.最大负数:同样的要求,阶码为负最小,尾数为负最小,形如:
这里的阶码转换为原码对应的真值为:
综上所述,最大负数为:
4.最小负数:要求阶码正最大,尾数、负最小,因为小数补码允许为-1,形如
其对应的真值为:
从上面的介绍,我们可以更直观的发现规格化补码形式的浮点数的范围确实比原码形式下复杂。由于相同位数下的补码表示的正数范围和负数范围也不是对称的,这点需要大家特别注意。(其实在复习到这一块的知识时,当时也是比较懵逼的,所以写下这篇博客和大家交流分享。)
到此这里为止就主要介绍了原码和补码下的浮点数范围。欢迎大家指教交流。
PS:本文设计比较复杂的公式和符号表达,为了更好地写出博客,特地去看了MarkDown编辑器的语法,感觉真心好用。更好使用MarkDown编辑器,推荐去看看用MarkDown编辑器写出漂亮博客。哈哈要午睡了,有问题或者想交流的直接私信或评论就可以啦~
- 机器浮点数的范围
- 浮点数的表示范围
- 浮点数的表示范围
- 浮点数的表示及范围 IEEE754
- 浮点数的范围和精度
- 浮点数范围是怎么算出来的
- 关于C浮点数范围的问题
- 浮点数 范围
- 浮点数表示范围注意事项
- 浮点数能够精确表示的整数的范围
- UVA 465 Overflow(浮点数的范围)
- 【深入理解计算机系统】【浮点数的表示范围】
- 浮点数和机器精度
- 补码表示的浮点数的规格化及示数范围
- 补码表示的浮点数的规格化及示数范围
- 关于浮点数的精度与取值范围的问题
- 关于浮点数的精度与取值范围的问题
- 关于浮点数的精度与取值范围的问题
- React-Native学习指南
- 小米sdk接入
- 阿里云Centos搭建java全攻略(jdk1.8+tomcat9.0+mysql5.7)
- Python __new__() 方法与__init__()方法
- Android开发设计模式之——单例模式【转】
- 机器浮点数的范围
- JavaScript数据类型隐式转换原则总结(干货!)
- Input框 type 类型 password 转换为label 的方法
- codeforces 743 A Vladik and flights(水题)
- poj 3468 区间更新or求和
- 开始写点什么
- Python 运算符
- <感悟2>
- Oracle 删除重复数据的语句,从网上整理来的