怎么可能立即给出5^5^5^5
(=2.351*10^87
如果你想知道的话)这样的计算结果?
我发现了一些关于矩阵计算速度的结果(这篇文章),但没有发现其他问题。这不是解释(我在 Python 中的(幼稚)实现现在运行了大约 5 分钟)。
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
。