本文对于那些浮点数表示方法和浮点数表示方法阶码与尾数的相关性题都进行详细的解,希望文章的内容能对大家有所帮助。
形状;
如果整数部分不为1,则小数点为浮点数,即100000111和100000112。
当然小数点是浮动的,订单代码也发生了变化。结果两位小数有7位有效数字。
因此,100000111是10000011,100000112也是10000011,所以0100000111等于0100000112。
那么,000000011122233f和000000011122234f这两个数字是否相等?
从表面上看,它们应该相等,尽管它们已经相差了14位小数。但实际上他们并不平等。有很多前导零,但这是一个浮点数。移动小数点以最简洁地表示该数字。标准化后,它们变成11122233f和11122234f。在这种情况下,小数点变为000000011122233f和000000011122234f这两个数字不相等,因为计算机可以看出这两个数字不同,因为数字7位于第7位。
两个数字floatx11=300000012f和floatx22=300000010f是否相等?
案是
不相等。
显示显示两个数字的前七位小数相同,整数部分也相同,但看起来应该相等。
x11=300000012f的小数部分明显大于2^-23,即尾数23位为1;x22=300000010f的小数部分明显小于2^-23,即23位为1,含义尾数为0。
然而,它们的整数部分是3(二进制11),归一化尾数的第1位被二进制3的第0位中的1占据。
这样,x11归一化前尾数的第23位就超出了归一化后尾数的范围。即归一化后,x11和x22尾数相同。但为什么结果仍然不相等呢?
原因是x11归一化时,尾数第23位为0,但第24位为1,等于float。
由于是机器的一半,所以不能丢弃,所以我们在尾数第23位加1,这样尾数第23位就变成了1,而不是0。
什么是机器?机器是指最小尾数,即尾数第23位为1时的值。
如果上面的理解正确的话,当设置x22的值时,归一化前的小数部分尾数部分的第22位将为1,所以如果整数部分的3归一化后,第22位将为1。位23变为1,因此x22与x11相同。看看下面是不是一样。
如果第22位为1,则值为2^,即0000000238,所以我的程序比较如下
floatx11=300000012f和floatx22=300000024f;这两个数相等吗?如果相等,我的理解是正确的。
这说明我的测是正确的。
一些例子
floatx11=300000011f和floatx22=300000012f不相等。
floatx11=300000011f和floatx22=300000010f相等。
请告诉我floatx11=10000000022f和floatx22=10000000011f是否相等。
将100除以二进制数得到1100100。归一化后,尾数中包含了100100,因此归一化前的尾数的第22位和第23位被分开,原来的位17变成了位23,原来的位18变成了。也是0,所以第24位当前为0,所以第24位及其后面的位被丢弃。所以x11和x22是相同的。
换句话说,如果浮点数的整数部分具有较大的值,则该值占据小数部分的有效位。
此外,还可以这样理解
x11=10000000022f,归一化为10000000022f;
x22=10000000011f,归一化为10000000011f;
可以看到小数点后7位和上面一样,可以看到x11和x22是相等的。
这就是规则。
即先对数字进行归一化,得到前导尾随1的数字,然后判断其小数部分,7位有效数字,并判断第8位的值是否大于机器的一半来判断。如果是这样,那就有凯瑞了。否则,丢弃它。
double,对于双精度浮点数
1个符号位,11个指数位,52个尾数位,总共64位。
在这种情况下,机器为2^-52,即000000000000000222。
换句话说,双精度浮点数小数点右侧有16位有效数字。
接下来我们来计算一下当类型为双精度时浮点数31415在内存中的表示。
将3转换为二进制得到11
将01415转换为二进制得到0010,0100,0011,1001,0101,1000,0001,0000,0110,0010,0100,1101,1101。
因此,31415的二进制表示为
110010,0100,0011,1001,0101,1000,0001,0000,0110,0010,0100,1101,1101
其标准化如下
110010,0100,0011,1001,0101,1000,0001,0000,0110,0010,0100,1101,1101
由于归一化,尾数中包含整数部分1,因此本例中的尾数如下。
10010,0100,0011,1001,0101,1000,0001,0000,0110,0010,0100,1101,110
第53位是1,加1得到
110010,0100,0011,1001,0101,1000,0001,0000,0110,0010,0100,1101,111
尾数转换为十六进制为921CAC083126F
指数码的原始码是1,即2^1。由于这是一个双精度浮点数,因此它的帧代码为2^11-1-1,即
将十进制数1023转换为十六进制得到3FF,再加上1次得到400。
因此,31415可以用双精度表示为
0
从后到前,每组4位组成十六进制数系统,表示为
0x400921CAC083126F
接下来用软件检查内存中的双精度浮点数31415是否为0x400921CAC083126F。
无符号长长a=0x0;
双b=31415;
a=无符号longlongamp;b;
这意味着获取变量b的地址,将该地址的类型转换为unsignedlonglong,并获取该地址的内容并将其发送到a。
调试中断并验证amp;b的值为0x0012FEA8,并且从此地址开始的8字节内存值为
我的计算机是英特尔处理器,数据以小端格式存储在内存中。即,数据的高位字节存储在存储器的高位地址处,数据的低位字节存储在存储器的高位地址处。低内存地址。
因此,从地址0x0012FEA8开始的8个字节构成数据0x400921CAC083126F。
关于浮点数表示方法的话题,和一些浮点数表示方法阶码与尾数相关题,解完毕,希望帮助到大家。
No Comment