浮点数表示方法,浮点数表示方法阶码与尾数

本文对于那些浮点数表示方法和浮点数表示方法阶码与尾数的相关性题都进行详细的解,希望文章的内容能对大家有所帮助。


内容太多,要写一篇逻辑严密的文章非常困难,所以有些点我不会深究,只总结一下粗浅的知识。关于浮点数IEEE754标准规定了以下内容浮点数组成1个符号位+N位指数码+M位尾数单精度浮点数1个符号位,8个指数位,23个尾数位,共32位,占用4个字节双精度浮点数1位符号,11位指数,52位尾数,共64位,占用8字节长双精度浮点数1个符号位,15个指数位,64个尾数位,共80位,占用10个字节其中,顺序码是原始码加上帧码,所谓帧码的值为2^N-1-1,例如单精度的2^7-。1=128。NaN表示不是数字:如果指数代码全为1并且尾数不全为0,则为NaN。这还包括安静NaN和信号NaN。如果尾数的第一位是1,则表示安静。NaN;如果尾数的第一位为0并且尾数的其余部分非零,则发出NaN信号。这是大多数处理器使用的标准,包括Intel和AMD的x86系列、Motorola68000系列、AIMPowerPC系列、ARM系列和SunSPARC系列。该标准被IEEE754采用。PA-RISC和MIPS处理器使用“is_signaling”标志作为第一位。这与上面的标准正好相反。那么什么是安静NaN和信号NaN?这就是它的含义如果运算结果是安静NaN,则在程序检查结果并确认其为NaN之前不会指示异常。这意味着当在软件中实现浮点时,计算将在没有来自浮点单元或库的任何信号的情况下继续。信号NaN生成一个信号,通常以FPU异常的形式出现。是否抛出异常取决于FPU的状态。上面我们介绍了浮点数NaN的定义,现在我们介绍+Inf和-Inf的定义。+Inf,即正无穷大如果符号位为0,顺序码全1,尾数全0,则为正无穷大。-Inf,即负无穷大如果符号位为1,则顺序码全为1,尾数全为0,则为负无穷大。因此对于64位双精度浮点数NaN是0xFFF8000000000000ULL+Inf是0x7FF0000000000000ULL-Inf0xFFF0000000000000ULL继续提单精度、双精度,能表示的最小十进制数是多少?如果知道每个精度能表示的最小十进制数,那么选择正确的精度类型就很明显了。已知float,单精度浮点数,1个符号位,8位指数码,23位尾数。由于尾数有23位,因此可以表示的最小小数对应23位尾数,只有最后一位为1,其余为0。即00000,0000,0000,0000,0000,001B。该二进制数的十进制等效值是2^-23,即0000000119D。那么000000012D对应的二进制是什么呢?0000000119D对应的二进制是00000,0000,0000,0000,0000,001B,所以这已经是最小的二进制数了,当二进制数加1时,00000,0000,0000,0000,0000,010B,对应的十进制数已经是0000000228D但是,由于000000012D在0000000119D和0000000228D之间,因此000000012D的二进制仍然是00000,0000,0000,0000,0000,001B。这意味着小数点后第8位不是有效数字。小数点后第七位数字会怎样?00000,0000,0000,0000,0000,001的十进制表示法为00000001。00000,0000,0000,0000,0000,010的十进制表示法为00000002。因此,float的有效位数为小数点后7位。以上是对二进制格式的数字的有效位的分析。如果下面是十进制数,示例0100000111D和0100000112D如果声明类型为float,这两个数字是否相等?首先,我们需要将十进制数标准化为1。xxxxx

形状;

如果整数部分不为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。


关于浮点数表示方法的话题,和一些浮点数表示方法阶码与尾数相关题,解完毕,希望帮助到大家。

除非特别注明,本站所有文字均为原创文章,作者:admin

No Comment

留言

电子邮件地址不会被公开。 必填项已用*标注

感谢你的留言。。。