提问人:Teodoras Paura 提问时间:11/1/2023 更新时间:11/1/2023 访问量:46
双精度浮点。为什么最大指数是 1023
Double precision floating point. Why is the maximum exponent 1023
问:
当我们有一个二进制 Intel 处理器和一个由 64 位表示的双精度浮点数时,其中 1 位表示符号,52 位表示尾数,11 位表示指数。
我不明白为什么它不应该是 2^11,因为 11 位专用于它。e_max = 2^10 - 1 = 1023
如何由此得出结论,最小的表示浮点数约为 10^(-308),最大的浮点数为 10^(308)?
感谢您的任何澄清或解释!
答:
...为什么 e_max = 2^10 - 1 = 1023 不应该是 2^11,因为 11 位专用于它。
不。考虑负指数。
使用 binary64 编码时,编码的数字具有偏置指数,即从 0 到 2047 的 11 位无符号整数。(0 和 2047 的偏置指数具有特殊含义。
应用偏移量 -1023 后,编码在 [-1023 ...1024](同样,端点具有额外的特殊含义。它编码非常大的值(如 10 308)和很小的值(如 10-308)。
binary64 编码的原始设计可以使用 11 位有符号整数作为指数,在某些有符号整数编码中,但这有缺点。对于有偏差的指数,我们有优势:
大约在那个时候,存在 2 补码、1s 补码和符号大小机器的有符号整数编码。选择这 3 个中的一个作为指数将不利于其他 2 个。
如果我们将整个浮点编码视为符号大小整数,则将保留浮点值从最小到最大的顺序。
所选偏置 (-1203) 提供的绝对值与大于 1.0 和小于 1.0 的绝对值大致相同。略微选择的偏差> 1.0 的绝对值多于< 1.0。这允许 1.0/max 表示为非零(某个次正常值)。它还允许 1.0/normal_values 不会溢出。使用 3 种流行的有符号整数编码之一不会提供这一点,除非它也有偏见。
评论