floating-point - 如何判断一个数字是否完全可以表示为 32 位 IEEE 浮点数?
问题描述
这是我教科书中的一个任务
给定一个字长为 32 位的假设计算机,按以下方式划分:
1 位用于符号位
9 位偏置指数
23 位尾数部分
2^-1 + 2^-29 是这台计算机上的机器号吗?我该如何确定这一点?
解决方案
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
)
请注意,许多现代文档使用“有效位”而不是“尾数”,因为它在数学上更正确。
推荐阅读
- azure - Terraform 导入 - 资源标签是否重要?
- python - Tkinter 标签未更新(对 tk.Stringvar 使用 .get 和 .set)
- node.js - 努力让 Query 和 Update 与 GraphQL 一起工作
- html - 提交输入按钮样式
- php - 如何使用 PHP DOMDocument 和 DOMXPath 从 HTML 字符串中提取内联 JavaScript 方法参数
- c# - 如何从 Active Directory 中获取项目以显示在我的列表视图的列中?
- php - 如何在json数组内的元素内取元素?
- javascript - NextJS 中使用 contextAPI 进行简单的状态管理
- php - Laravel 任务调度
- authentication - 拒绝所有作为 sshd 中的默认身份验证选项