floating-point - 究竟如何定点比浮点更准确
问题描述
我(认为)我理解二进制小数的定点和浮点表示。但是,我经常看到定点被描述为更精确且范围更小,而浮点被描述为更不准确且范围更大。现在,如果我理解正确,浮点数的不准确性源于它不能表示 0.1 以及许多其他实数 = 我认为定点有同样的问题,那么它如何被描述为更“准确”。如果我没记错的话,冯诺依曼似乎也支持这个想法,并说我们不应该使用浮点数而是固定的,但是为什么?
解决方案
当使用 32 位进行浮点表示时,它们通常被划分为 1 位用于编码符号,8 位用于编码指数,以及 23 位用于有效数的主要编码。由于对指数的一些特殊处理,完整有效数有 24 位。在这种格式中,浮点数的分辨率是 2 23的 1 部分,在某种意义上,改变低位会使表示的值改变高位值的 2 -23倍。
当使用 32 位进行定点表示时,高位通常用于表示符号,因此最高值位次之,它表示低位值的2 30倍。因此,使用这种格式,定点数的分辨率是 2 30中的 1 部分。
因此,使用相同的位数,定点比浮点具有更高的分辨率。即使有其他选择用于哪些部分使用多少位,浮点需要使用一些位作为指数,而定点使用零,因此定点总是比浮点具有更精细的分辨率。
浮点提供动态范围,这意味着它可以通过改变指数作为计算的一部分来处理大数或小数。定点只有静态范围——它可以表示大数或小数,但您必须在设计代码时选择范围。(在某种程度上,这可以被巧妙地处理,例如通过为输入值选择一个小范围,然后随着值相加而增加范围以形成越来越大的总和或其他结果。但是,每个特定计算的比例必须在设计时选择。)如果您需要更高的分辨率并且不需要动态范围,则使用定点。如果您需要动态范围并且不需要更高的分辨率,则使用浮点。如果两者都需要,请使用更多位。
请注意,固定比例意味着定点有时会不如浮点准确。浮点调整其比例以将前导数字移动到高位,直到其指数范围的限制。因此,它以上述格式将分辨率保持在 1 比 2 23左右。但是固定点与设计时选择的比例有关。如果它需要表示一个大小落在定点格式的第 2 位的数字,那么它对该数字的分辨率仅为 2 2中的 1 左右。
推荐阅读
- python - 检查嵌套字典的存在
- python - 从计算中排除列,然后再次检索
- c - 如何在c中将一个数字与999相除?
- linux - 在 Linux 中用户友好地执行下载的文件
- coldfusion - 从 ColdFusion 请求中获取查询参数/字符串
- atom-editor - 如何在 Atom 中添加格式菜单栏——“剪切”、“复制”、“粘贴”
- r - glmmPQL (MASS) 摘要输出中的 AIC NA 意味着什么?
- python - 解压由 pool map 创建的列表
- html - 通过 AJAX 将正确的值发送到电子邮件
- javascript - 在异步 Jest 测试中是否需要完成?