【问题标题】:What are the benefits of symmetric level index arithmetic (alternative to floating point)?对称级别索引算法(浮点的替代方案)有什么好处?
【发布时间】:2015-05-23 08:06:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: math floating-point numbers


    【解决方案1】:

    对称级别索引算术 (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(有关值,请参见this article),可以很容易地用标准 SLIA 表示为8.2。更大的数字,例如Graham's number,不能在任何基本的 SLIA 中有效地表达,塔的数量太大了。 Base e 非常方便,因为它不需要任何校正因子。

    【讨论】:

    • 你在暗示epsilon = ulp(index),用x = e^e^e^index,更精确的结果是ulp(x)/x ~ ln(x) ulp(index),这更能说明ulp(x)/x = [ln(x) * index] * ulp(index)/index,因为它显示了相对不确定性中的大乘法因子在xindex 之间,对吧?
    • @EOL 我刚刚将我的约定从epsilon 更改为ulp(index)。我认为这要清楚得多。感谢您的建议!
    • 谢谢!现在,“n 和 e^n 之间的 massive 乘法差异”与您给出的示例无关(两者之间只有大约 3 的因子),因为 n 非常接近 0,所以最好有资格。
    • @EOL 我明白了。好吧,如果 ln(n)ln(ln(n)) 之间的乘法差异对于您的大量数字来说很小,那么您可能不应该使用 SLIA。
    • 当然,但我指的是您的 example,其中不同的 很小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多