概述
在尾数用原码、纯小数,阶码用移码、整数的浮点数表示方式中,规格化浮点数N的表示数的范围是:
(2.1) 从式(2.1)中可以看出,规格化浮点数的最大正数值是由尾数的最大正数值与阶码的最大正数值组合而成的,而最小正数值是由尾数的最小正数值与阶码的最小负数值组合而成的。在负数区间,规格化浮点数的最大负数值是由尾数的最大负数值与阶码的最小负数值组合而成的,最小负数值是由尾数的最小负数值与阶码的最大正数值组合而成的,这一点也可以从图2.2所示的数轴上看到。
移码:
(n为二进制数x的位数),另外,与补码运算规则相同,要把多于n位的数丢掉。例如,
十进制: -128 -1 0 +1 +127
二进制补码:10000000 11111111 00000000 00000001 01111111
二进制移码:00000000 01111111 10000000 10000001 11111111
从上面的例子中可以看出,如果把移码的符号位也当作数值来看待,那么,表示一个移码的规则是:从能够表示的最小数(绝对值最大的负数)到最大数正好是二进制的"全0"到"全1"。
在浮点数表示方法中,阶码要用移码表示的主要原因是:从上面看到的,规格化浮点数的最大负数(-Nmax)和最小正数(Nmin)都与阶码的最小负数值有关,而在除移码之外的其它所有码制中,最小负数都不是全0(包括符号位)。如果"浮点零"与"机器零"不一致,对计算机系统的软件设计和硬件设计都会造成许多麻烦。通过下面的例子可以更清楚地了解移码。
例如:p=23,q=7,rm=re=2,尾数用原码、纯小数表示,阶码用移码、整数表示,规格化浮点数N的表示数的范围是:
即为:
在机器中实际表示为:
规格化最大正数:0111 1111 1111 1111 1111 1111 1111 1111
规格化最小正数:0000 0000 0100 0000 0000 0000 0000 0000规格化最大负数:1000 0000 0100 0000 0000 0000 0000 0000
规格化最小负数:1111 1111 1111 1111 1111 1111 1111 1111以上红体字表示阶码,蓝体字表示尾数,每4个二进制位分开只是为了阅读方便。
如果阶码用补码表示,浮点0为:0100 0000 0000 0000 0000 0000 0000 0000(其中,红体字为阶码),则浮点0与机器0不同,判0有困难。如果阶码用移码表示,最小数(绝对值最大的负数)-128用补码表示为:00000000,则"浮点0"等于"机器0"。
下面再举一个尾数基值不是2的情况。例如,尾数用原码、小数表示,阶码用移码、整数表示,p=6,q=6,rm=16,re=2,求规格化浮点数N表示数的范围。
规格化浮点数N表示数的范围是:
即: 无论尾数的基值是多少,在机器中实际上都要用二进制来表示,当尾数基值为16时,必须用4个二进制位表示一个16进制位,因此,用16进制表示为:
规格化最大正数为:7FFFFFFF。阶码最大,包括符号位在内,7个二进制位为"全1"。尾数也最大,数值部分为"全1",用16进制表示为6个F。最前面的符号位为0。
规格化最小正数为:00100000。阶码最小,包括符号位在内,7个二进制位为"全0"。尾数也最小,但是,为了满足规格化浮点数的要求,数值部分的最高一个16进制位必须为非0。在16进制中,最小的非0数是1/16,用二进制表示为0001,用16进制表示为1,因此,6位16进制尾数的数值为100000。另外。最前面的符号位为0。规格化最大负数为:80100000。除符号位为1之外,其他与规格化最小正数相同。
规格化最小负数为:FFFFFFFF。除符号位为1之外,其他与规格化最大正数相同。
最后
以上就是执着衬衫为你收集整理的规格化浮点数的全部内容,希望文章能够帮你解决规格化浮点数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复