我指的是这个问题,但我对答案不满意:IEEE-754 32 Bit (single precision) exponent -126 instead of -127
答案是否意味着实际上指数可以是,但由于非规范化形式的表示,最小的正数为等于。
这是否意味着最小的可表示正数是:
最后两个选项中的哪一个?
非常感谢你。
再次感谢大家,你们都给出了很好的解释!
答案 0 :(得分:2)
在IEEE-754基本32位二进制浮点中,每个有限值都具有以下形式:
±x.xxxxxxxxxxxxxxxxxxxxxxx•2 e
其中x.xxxxxxxxxxxxxxxxxxxxxxx是二进制数字,-126≤ e ≤+ 127。
对于正常数字,第一个x为1, e 可以是-126≤ e ≤+ 127的任何值。由于第一个x始终为1,因此未明确存储 - 浮点格式包含符号的一位,其他x的23位和指数的8位。指数存储为 e +127的二进制数。因此,对于 e ,从-126到+127,存储的值为1到254.即0和255。
指数字段中的0是次正规数的代码。对于次正规数,指数 e 与最低正常指数-126相同,但第一个x为0.因此,次正规值的形式为:
±0.xxxxxxxxxxxxxxxxxxxxxxx•2 -126
因此,可以表示的最小正值是:
+ 0.00000000000000000000001•2 -126
是2 -149 。
(指数字段中的255用于表示无穷大和NaN。)
答案 1 :(得分:2)
为什么指数IEEE754(单个)限制在2 ^ { - 126}< = e< = 2 ^ {127}之间? 改写:
之间
为什么指数IEEE754(单个)限制在-126< = exponent< = 127?
binary32有一个8位偏置指数字段,允许256个值。可以选择更宽/更小的指数字段,但这里是8。 2个值0和255具有特殊含义,留下254.
在20世纪70年代,人们得出结论,对称分布这些偏置指数值+/-约为零,通过采用127偏移导致254值-126到+127。
正常值的形式为:sign *(1.xxx ...总计23 x' s ... xxx)* 2 指数 - 偏移量提供24位二进制精度。
由于各种数值计算的原因(经过多次辩论),得出的结论是|值|小于最小正常正数1.0 * 2 1 - 127 应该逐渐失去精确度。这些是次正常或denormal数字。它们使用偏置指数 0和编码,其结果指数为-126 ,为最小正常数。
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
因此,低至2 -127 的值具有24位精度,而低于2 -149 的值的精度不断下降。
答案 2 :(得分:1)
这很简单:-126被选择用于非正规数,因此在最小法线和最大法线之间没有步骤。
最低法线是
1.0000 ... bin ×2 -126
下面有一个“ULP”
0.1111 ... bin ×2 -126
如果它是2 -127 ,那么在这两个值之间将存在几个“ULP”(或甚至许多“ULP”)的步骤。