c - CSAPP 3ed 练习题 2.49 IEEE 浮点精度
问题描述
对于具有 n 位小数的浮点格式,请给出不能精确表示的最小正整数的公式(因为它需要 (n + 1) 位小数才能精确)。假设指数域大小 k 足够大,可表示的指数范围不会为这个问题提供限制。
书上给出的解是2^(n + 1) + 1,但是没有提供任何解释。有人能解释一下我们是如何得出这个公式的吗?谢谢你。
解决方案
考虑具有23位精度分数的32 位浮点 IEEE表示。
24位整数 111111111111111111111111 2 = 2 24 - 1 可以精确表示,因为有足够的位(即使最高有效位是隐式的)。
加 1,我们有 1000000000000000000000000 2 = 2 24。没问题,即使它是 25 位数字,因为它是 2 的幂。
但是,下一个 1000000000000000000000001 2 = 2 24 + 1无法准确表示,因为表示的小数部分没有足够的位。
推荐阅读
- c# - 为什么我在使用 Html.EditorFor 时得到 System.NullReferenceException
- git - 在 git 中的提交之间之前的签核
- github - 在合并配置之前如何测试dependabot
- identityserver4 - 在同一子域中运行的不同 IdentityServer 实例
- javascript - 覆盖导入语句以指向自定义包
- java - Quickfixj 1.4.0 - 套接字异常(主机地址:端口)一个现有的连接被远程主机强行关闭
- python - 如何为 CNN 架构填充序列?
- xcode - CocoaPods pod install 正在删除一些构建阶段
- html - 按钮不会在部分中间居中
- emacs - Emacs:有没有简单的方法来复制带有 ido 导航的文件?