【发布时间】: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 感谢您指出这一点。我删除了对链接的引用。我希望我的问题不会被暂停!据我所知,用例类似于浮点数。如果它们可以有效地实现,我认为在低位数的情况下更有可能发生,那么平滑的分布和它的简单性可以使它比传统的浮点数更具优势。