首页 > 解决方案 > 如何判断一个数字是否完全可以表示为 32 位 IEEE 浮点数?

问题描述

这是我教科书中的一个任务

给定一个字长为 32 位的假设计算机,按以下方式划分:
1 位用于符号位
9 位偏置指数
23 位尾数部分

2^-1 + 2^-29 是这台计算机上的机器号吗?我该如何确定这一点?

标签: floating-pointbinarybitcpu-architectureieee-754

解决方案


abs((-1) - (-29))大于尾数宽度,所以不,这将需要太多有效数字(尾数位)。

如果您以非指数二进制点表示法将它们写出来,例如0.10000...0001,则 2 个之间的差距将大于尾数。(它就像一个小数点,但它是二进制位值,所以我们称之为二进制点。)

即 2 -29小于 1 ulp 对于 2 -1。(ULP = 最后一位的单位 = 尾数的低位。)

二进制浮点数可以表示固定数量的(二进制)“有效数字”,等于尾数宽度,而与指数无关。https://en.wikipedia.org/wiki/Significant_figures


请注意,尾数的存储宽度仅为 23 位,但有一个隐含的前导 1(用于规范化数字)。 https://en.wikipedia.org/wiki/Single-precision_floating-point_format

所以 1 + 2 -23是完全可表示的。即 1 ulp 相对于 1.0 = 2^-23。(相关:https : //en.wikipedia.org/wiki/Machine_epsilon 像 C FLT_EPSILON 是 1.0 的半个 ulp,所以 binary32 浮点数为 2^-24。这是您可以添加的最大值,1.0并且仍然有结果轮到1.0,即添加到时可以获得的最大舍入误差1.0

请注意,许多现代文档使用“有效位”而不是“尾数”,因为它在数学上更正确。


推荐阅读