【问题标题】:Algorithm for tetration to work with floating point numbers用于处理浮点数的四分法算法
【发布时间】:2023-12-08 04:46:01
【问题描述】:

Tetration 是幂以上的级别(例如:2^^4 = 2^(2^(2^2)) = 65536。

到目前为止,我已经找到了一种可行的四分法算法。

不过,尽管变量a 可以是浮点数或整数,但很遗憾,变量b 必须是整数。

如何修改伪代码算法,使ab 都可以是浮点数并产生正确答案?

// Hyperoperation type 4:
public float tetrate(float a, float b)
{
    float total = a;
    for (i = 1; i < b; i++) total = pow(a, total);
    return total;
}

为了解决这个问题,我创建了自己的自定义 power() 函数(试图避免根函数和对数函数),然后成功地将其推广到乘法。不幸的是,当我尝试推广到四分法时,数字变成了梨形。

我希望算法精确到小数位数 x,而不是像* talks about 那样的近似值。澄清一下,最好至少满足第一个three requirements,第四个要求可以由回答者来决定。

【问题讨论】:

标签: c algorithm calculator exponentiation


【解决方案1】:

base_num ^^ tetration_num =

e^(base_num * ln (e^(tetration_num * ln base_num)))

可以使用泰勒级数计算自然对数,达到您需要的任何精度。

e^x 也可以通过泰勒级数计算到您需要的任何精度。

在注意上溢/下溢的情况下,您应该能够使用上述方法处理所需的任何值。

以防万一您需要系列,This page 列出了您需要的那些。在定点数学(整数,无浮点数)中编写了与此类似的代码后,我可以说启动和运行并不难,但是您需要注意做事的顺序,否则您会快速溢出数字。


更新

事实证明,我的上述内容仅适用于某些四分法,因为我不完全了解四分法的工作原理。傻兔子。

【讨论】:

  • Tetration a^^x 不是 (a^x)^a 正如您的回答似乎暗示的那样。这是a^(...^(a^(a^a)))a 重复x 次。
  • 那么,无论如何,我可以改变我的答案,但我展示的概念仍然有效 - e^x - ln x 可用于处理可变精度。
  • 如果你有明确定义的幂。但是您不能将具有真实高度的四分法表示为指数的组合。 (该定义 a^(...^(a^(a^a))) 用于自然高度)
  • 啊。我现在明白了。有趣的。那么我上面的答案将不起作用。我会这样更新我的答案。
最近更新 更多