3

我对MatlabOctave的计算速度感到非常困惑。

怎么可能立即给出5^5^5^5(=2.351*10^87如果你想知道的话)这样的计算结果?

我发现了一些关于矩阵计算速度的结果(这篇文章),但没有发现其他问题。这不是解释(我在 Python 中的(幼稚)实现现在运行了大约 5 分钟)

4

1 回答 1

3

5^5^5^5毕竟不需要那么多操作。例如,在每个幂步骤,例如a^b,您可以计算exp(log(a)*b),它给出相同的结果。

我并不是说这一定是 Matlab 的做法,并且可能存在数值精度问题。但这说明多幂运算并不像其直接计算所暗示的那么难。

至于数值精度:

>> format long
>> 5^5^5^5
ans =
    2.350988701644576e+087
>> exp(log(exp(log(exp(log(5)*5))*5))*5)
ans =
    2.350988701644561e+087

相对误差为

>> 1 - (5^5^5^5 / exp(log(exp(log(exp(log(5)*5))*5))*5))
ans =
   -6.661338147750939e-015

这离 . 不是很远eps

于 2014-01-29T22:05:03.753 回答