Floating point 为什么指数IEEE754(单个)限制在2^{-126}<;=e<=2^{127}?

Floating point 为什么指数IEEE754(单个)限制在2^{-126}<;=e<=2^{127}?,floating-point,ieee-754,Floating Point,Ieee 754,我指的是这个问题,但我对答案不满意: 答案是否意味着指数实际上可以是,但由于非规范化形式的表示,最小的正数等于 这是否意味着最小的可表示正数为: 或 最后两个选项中的哪一个 事先非常感谢 再次感谢大家,你们都做了很好的解释 这很简单:-126被选为非正规值,因此最小正规值和最大非正规值之间没有步长 最低正常值为 1.0000…箱×2-126 下面的一个“ULP”是 0.1111…料仓×2-126 如果是2-127,则在这两个值之间会有几个“ULP”(甚至多个“ULP”)的步长 这很简单:-126

我指的是这个问题,但我对答案不满意:

答案是否意味着指数实际上可以是,但由于非规范化形式的表示,最小的正数等于

这是否意味着最小的可表示正数为:

最后两个选项中的哪一个

事先非常感谢


再次感谢大家,你们都做了很好的解释

这很简单:-126被选为非正规值,因此最小正规值和最大非正规值之间没有步长

最低正常值为

1.0000…箱×2-126

下面的一个“ULP”是

0.1111…料仓×2-126


如果是2-127,则在这两个值之间会有几个“ULP”(甚至多个“ULP”)的步长

这很简单:-126被选为非正规值,因此最小正规值和最大非正规值之间没有步长

最低正常值为

1.0000…箱×2-126

下面的一个“ULP”是

0.1111…料仓×2-126


如果是2-127,则在这两个值之间会有几个“ULP”(甚至多个“ULP”)的步长

在IEEE-754基本32位二进制浮点中,每个有限值的形式如下:

±x.XXXXXXXXXXXXXXXXXXXX•2e

其中x.xxxxxxxxxxxxxxxxxxxx是一个二进制数字−126≤ E≤ +127

对于正常数字,第一个x是1,e可以是中的任何值−126≤ E≤ +127由于第一个x始终为1,因此不会显式存储。浮点格式包含一位符号,23位其他x,8位指数。指数存储为e+127的二进制文件。那么,对于来自−126到+127,存储值为1到254。剩下0和255

指数字段中的0是低于正常值的数字的代码。对于次正态数,指数e与最低正态指数相同,−126,但第一个x是0。因此,次正常值的形式为:

±0.xxxxxxxxxxxxxxxx•2−126

因此,可以表示的最小正值为:

+0.00000000000000001•2−126

哪一个是2−149


(指数字段中的255用于表示无穷大和NaN。)

在IEEE-754基本32位二进制浮点中,每个有限值的形式如下:

±x.XXXXXXXXXXXXXXXXXXXX•2e

其中x.xxxxxxxxxxxxxxxxxxxx是一个二进制数字−126≤ E≤ +127

对于正常数字,第一个x是1,e可以是中的任何值−126≤ E≤ +127由于第一个x始终为1,因此不会显式存储。浮点格式包含一位符号,23位其他x,8位指数。指数存储为e+127的二进制文件。那么,对于来自−126到+127,存储值为1到254。剩下0和255

指数字段中的0是低于正常值的数字的代码。对于次正态数,指数e与最低正态指数相同,−126,但第一个x是0。因此,次正常值的形式为:

±0.xxxxxxxxxxxxxxxx•2−126

因此,可以表示的最小正值为:

+0.00000000000000001•2−126

哪一个是2−149

(指数字段中的255用于表示无穷大和NaN。)

为什么指数IEEE754(单个)限制在2^{-126}
为什么指数IEEE754(单个)限制在2^{-126}之间?您想要最小的可精确表示的正常正数(即
2^{-126}
),还是最小的可精确表示的正数(即
2^{-149}
)?(这两者都不等于你给出的两个选项中的任何一个。)我主要对最小的可表示正数感兴趣,但我也选择了确切的可表示正数。如果你能给我解释为什么我对最小正数的建议是错误的/不可能的,我将更加感激。我一直认为指数是由e-127计算的,e有8位,这导致最小值为-127。为什么只有-126([00000001]_2)是可能的?您想要最小的可精确表示的正常正数(即
2^{-126}
),还是最小的可精确表示的正数(即
2^{-149}
)?(这两者都不等于你给出的两个选项中的任何一个。)我主要对最小的可表示正数感兴趣,但我也选择了确切的可表示正数。如果你能给我解释为什么我对最小正数的建议是错误的/不可能的,我将更加感激。我一直认为指数是由e-127计算的,e有8位,这导致最小值为-127。为什么只有-126([00000001]_2)是可能的?谢谢你,你能用IEEE754单条解释一下正常和非正常之间的区别吗?(可能会在周二重新上线)@baxbear:那是为了单精度。对于双精度,指数是不同的,但遵循相同的原则:-1022..1023(IIRC)fr法线,以及-1022非规范值。@baxbear:或者你的问题是:法线和非规范值之间的区别是什么?在某个时刻,为了“变小”,你不能再减少指数,所以你开始从有效位中删除位。首先,删除顶端的位,即二进制点之前的位,然后开始倒计时(23位)。正常数字必须有
1.
位,因此如果删除它,数字就不再正常:非正常(我想他们也可以称之为异常或异常)。删除的前导位越多,保留的有效位就越少,因此您会慢慢失去精度。谢谢,您还可以用IEEE754单字节解释正常位和非正常位之间的区别吗?(可能会
         v--------------------------------------- Implied valued              
         | v--------------------------v---------- Significant explicitly encoded
         | |                          |     v---- Biased exponent
         | |                          |     | v-v Implied offset  
2^-126 = 1.000 0000 0000 0000 0000 0000 * 2^1-127 // smallest normal
         0.111 1111 1111 1111 1111 1111 * 2^0-126 // largest sub-normal
2^-127 = 0.100 0000 0000 0000 0000 0000 * 2^0-126
2^-128 = 0.010 0000 0000 0000 0000 0000 * 2^0-126
2^-129 = 0.001 0000 0000 0000 0000 0000 * 2^0-126
...
2^-149 = 0.000 0000 0000 0000 0000 0001 * 2^0-126 // smallest sub-normal
0.0f   = 0.000 0000 0000 0000 0000 0000 * 2^0-126 // zero