对称级索引算法(替代浮点)有什么好处?

What are the benefits of symmetric level index arithmetic (alternative to floating point)?

现在几乎每个人都使用 floating point 算术。该系统本质上是范围和精度之间的权衡,允许一个人表示非常小或非常大的数字。但是,还有其他方法可以做到这一点。

正如我最近发现的那样,其中一种方法称为 symmetric level-index arithmetic。这是一个复杂的系统,涉及一种电力塔,我在各个地方看到过一些零星的系统软件实现。

与传统的浮点运算相比,该系统的优点和缺点是什么?不能通过例如增加指数的底数来复制它吗? (从而进一步降低精度,但增加范围)

对称的水平索引算法 (SLIA) 非常擅长表示巨大的数字。例如,它可以轻松地将 googol 10^100 表示为 4.5268756157751 或将 googolplex 10^(10^100) 表示为 5.5272678974304。您可以轻松地在滴定链中继续这样做。这与浮点数学形成鲜明对比,浮点数学在遇到本身是高数量级的指数时会中断。

但是,浮点数确实具有固定的乘法(百分比)精度。值 ulp(x)/x,其中 ulpx 和下一个最接近的可表示数字之间的距离,受相对较低的值 = 2^(-bits of precision) 约束。另一方面,SILA 不保证这种效果。假设你正在存储你的 SILA 表示的位定点(因为你可能会在你的级别上有 some 上限),你的索引值中有一些固定的 ulp .以 SILA 为例,以 SILA = 3.14159 为例; x = e^(e^(e^.14159)))。为了找到 ulp(x),我们可以使用导数规则来传播不确定性,使用 ulp(index) 作为索引中的不确定性 (.14159)。 ulp(x) = e^(e^(e^.14159)))*e^(e^.14159))*e^.14159*ulp(index),所以 ulp(x)/x = e^(e^.14159))*e^.14159*ulp(index)。这种模式通常成立,并且由于 ne^n 之间的巨大乘法差异,我忽略了除第一项以外的所有项以得出 ulp(x)/x ~ ln(x)*index*(ulp(index)/index) 的结论。与使用浮点表示法相比,这显然是一个更高级别的错误。

增加表示的基数会增加范围。然而,真正的问题是你希望你的数字有多大?物理学中最大的数字之一,the Poincare recurrence time (see this article for the value), can be easily represented by standard SLIA as 8.2. Larger numbers, such as Graham's number,无法在任何基础 SLIA 中有效表达,塔的数量太多了。基数 e 非常方便,因为它不需要任何校正因子。