【问题标题】:Extreme Floating Point Numbers极端浮点数
【发布时间】:2018-05-01 23:51:57
【问题描述】:

我想知道是否有一些工作可以替代浮点数,其中数字仅表示为指数(和符号位)。它类似于浮点数,除了尾数会被跳过,并且基数 b (通常)不会是 2。

因此,唯一可表示的数字将是 b 的某些幂。

这里是一个简单的例子: 让b 为 2^(2^-4),让我们使用 8 位来表示。第一位用于符号,其余 7 位用于指数,它是二进制补码。那么

00000000 represents (2^(2^-4))^0 = 1
00000001 represents (2^(2^-4))^1 ≈ 1.044
10000000 represents -1
01000001 represents (2^(2^-4))^-63 ≈ 0.065
10111111 represents -(2^(2^-4))^63 ≈ -15.32

请注意,可以添加 0、NaN 等的特殊情况。

与通常的浮点表示相比,该表示具有某些优势。例如,乘法变为加法,可表示的数字分布更平滑。一个缺点可能是计算加法(我想出的实现是使用二叉树,当二叉树很小并在硬件中实现时它可能会很快)。

欢迎提供与此表示相关的任何信息(是否考虑过,为什么会不好,如果有的话,它的名称等)。

【问题讨论】:

  • 如果您需要一个不是b 的整数幂的数字,这会有什么用?我看不出这样的系统如何获得很大的吸引力。这不是表示实数的通用方案。
  • @JohnColeman 类似于浮动。它们只能表示有限数量的实数。不过,它们对计算很有用。请注意,可以通过b 调整精度;接近 1 的 b 会增加它,但会减少可表达的范围。这种表示与普通浮点数一样有效,因为在相同的位数的情况下,可以用相似的精度表示相似的范围(通过适当地选择b)。
  • 从技术上讲,这可能至少部分是用于 Stack Overflow 的 off-topic,因为它需要场外资源。但这并非无趣。但我认为如果你展示具体的用例会更有趣。我不知道这些方面的工作。
  • 加法是否只取决于指数的差异?考虑 b^x + b^y = (b^0 + b^(y-x))•b^x,因此知道所有 z 的 1+b^z 使得计算 b^x + b^y 变得容易。 (这两个元素都是正面的;类似的结果适用于所有符号组合。)
  • @EricPostpischil 感谢您指出这一点。我删除了对链接的引用。我希望我的问题不会被暂停!据我所知,用例类似于浮点数。如果它们可以有效地实现,我认为在低位数的情况下更有可能发生,那么平滑的分布和它的简单性可以使它比传统的浮点数更具优势。

标签: floating-point numbers


【解决方案1】:

这是一个logarithmic number system:“LNS 可以被认为是一个浮点数,其有效位总是等于 1。”

【讨论】:

  • LNS 主要通过 ALU 实现,可以共享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多