【问题标题】:Fixed-point instead of floating point定点而不是浮点
【发布时间】:2017-06-28 08:24:05
【问题描述】:

定点数至少需要多少位才能与浮点数一样精确?如果我想用定点算术而不是浮点进行计算,我需要多少位才能使计算不那么精确?

单精度(32 位)浮点数可以表示小至 2^-126 大至 2^127 的数字,是否意味着定点数必须至少为 128.128 格式? (整数部分128位,小数部分128位)。

我知道单精度浮点数一次只能表示约 7 个十进制数字的范围,我在询问所有可能的值。

那么双精度(64 位浮点数)呢,真的需要 1024.1024 格式才能同样精确吗?

【问题讨论】:

  • 请注意,128.128 浮点数实际上比 IEEE-754 浮点数更精确,因为后者有间隙(因为使用了有限尾数和指数)。浮点数或多或少是一种指数格式,具有固定大小的尾数/有效数,大于或小于范围 [1.0, 2,0) 的值是通过乘以 2^exponent(和一个符号)得出的——请注意,我没有讨论非规范化或NaN或无穷大。定点格式不会有任何间隙。无论如何,这是有道理的,因为浮点数有 32 位,而 128.128 的定点数将有 256。
  • 但是你真的需要所有这些值吗?查看特定应用所需的值范围,并确定需要多少位。我想你可以节省一些。
  • @RudyVelthuis “请注意,128.128 浮点数实际上会更精确” - 对于几乎所有值,都是真的。 “你真的需要所有这些价值观吗?”可能不是,但我仍然很好奇需要多少位才能达到与浮点数相似的精度,尤其是对于边缘情况。
  • 应该不难发现:最小的非正规是尾数中的 1(最低)位和最小指数(-126,IIRC,但不要让我失望) .

标签: floating-point precision fixed-point single-precision


【解决方案1】:

对于single precision,您需要存储值在范围内的位 [2-149, 2128) 这需要有符号的 128.149 定点类型,总宽度为 278 位

对于double precision,您需要存储值在范围内的位 [2-1074, 21024) 需要有符号的 1024.1074 定点类型,总宽度为 2099 位

(免责声明:这一切都假设我犯了偶数个错误。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-07
    • 2021-07-04
    • 2013-07-27
    • 1970-01-01
    • 2015-11-22
    • 2010-10-06
    • 2015-07-20
    • 2017-04-22
    相关资源
    最近更新 更多