【问题标题】:How can Matlab or Octave be so fast? [closed]Matlab 或 Octave 怎么能这么快? [关闭]
【发布时间】:2014-02-21 23:44:08
【问题描述】:

我对@9​​87654321@或Octave的计算速度感到很困惑。

如何立即给出像5^5^5^5(= 2.351*10^87,如果你想知道)这样的计算结果?

我找到了一些关于the speed for matrix computations (this article) 的结果,但没有找到关于其他问题的结果。 this 不是解释(我在 Python 中的(幼稚)实现现在运行了大约 5 分钟)。

【问题讨论】:

  • 可能的答案太多,或者对于这种格式来说,好的答案太长了。请添加详细信息以缩小答案范围或隔离可以在几段中回答的问题。
  • 你要计算5^(5^(5^5))还是((5^5)^5)^5 = 2.351*10^87
  • 您使用哪种算法进行乘法运算?学校方法,Karatsuba,使用 FFT?
  • @jonrsharpe:我知道您的评论,但也许可以提供一些线索或其他什么?我想知道如何减少我的问题。你认为专注于权力是个好主意吗?
  • 5^5^5^5 不是 2.351*1087。大约是 1.3357*102184。求幂是右结合的。 5^5^5^5 是 5^(5^(5^5)) 的缩写。 ((5^5)^5)^5 是一个更容易计算的数字。那只是 55*5*5=5125

标签: python performance matlab math computation


【解决方案1】:

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不是很远。

【讨论】:

  • 您的意思可能是“不需要”。
  • @MrAzzaman 哎呀!谢谢!!
猜你喜欢
  • 2014-05-09
  • 2012-05-18
  • 2016-03-19
  • 2010-09-13
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2013-02-15
  • 2017-08-07
相关资源
最近更新 更多