繁体   English   中英

为什么 Java 中浮点数(32 位)的指数是 -126 而不是 -128?

[英]Why is the Exponent for Float (32 Bit) in Java -126 and not -128?

32 位标准:

1 位用于数字的正/负值。 指数为 8 位,尾数为 24 位。

Exponent 8 位,即 1 * 2^7 + 1 * 2^6 +... = 255 当最大 Exponent 为 127 时,最小 Exponent 应为 -128,因此 126 + 128 = 255。

但是为什么 Java 说最小指数是-126? 255 - (127+126)= 2,所以我们没有使用两个数字。

这个数字有一个“偏见”,这些位是什么? 首先从中减去0x7F以获得您的值。 使用值0x01达到最低指数: 0x01 - 0x7F = 1 - 127 = -126 最高值达到0xFE : 0xFE - 0x7F = 254 - 127 = 127

但是,指数值0x000xFF发生了什么? 这就是为什么有 254 个而不是 256 个可用的唯一指数:这两个是特殊的魔法,通常不可用。 指数 0 既用于编码 0(如果分数的数字也是 0),也用于编码所谓的次正规数,即非常接近 0 的数字。

0xFF用于特殊值; 这就是浮点数如何存储NaN和两个无穷大。

有 2 个指数序列编码特殊值。 所有 0 编码 0 或次正规,具体取决于尾数。 所有 1 都编码 Infinity 或 NaN。 这意味着就像你说的那样,有 254 个序列来编码正常数字,而不是 256 个指数序列。

因此,指数 00000001 编码幂 -126 和 11111110 编码幂 127 是有意义的。这是正常数字的指数范围。

https://en.wikipedia.org/wiki/Single-precision_floating-point_format

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM