我最近发现,至少在 MATLAB 2013b 中,重复乘法比整数幂要快得多。那是,
tic;test4p = a.^4;toc
比
tic;test4m = a.*a.*a.*a;toc
有关详细信息,请参阅http://www.walkingrandomly.com/?p=5377。是否有任何数字原因(准确性等)为什么重复乘法可能是一个坏主意?
我最近发现,至少在 MATLAB 2013b 中,重复乘法比整数幂要快得多。那是,
tic;test4p = a.^4;toc
比
tic;test4m = a.*a.*a.*a;toc
有关详细信息,请参阅http://www.walkingrandomly.com/?p=5377。是否有任何数字原因(准确性等)为什么重复乘法可能是一个坏主意?
数字原因是损失精度。在每次乘法时,您都会失去一点精度。如果你想通过乘法来实现幂,那么最好查一下算法。我曾经对 Stepanov 的“编程元素”一书中的算法进行了编码,这是最快的方法。
更新:我发现 Stepanov 的书的早期版本是Notes
在 10.3 节中搜索 fast_power 算法。太漂亮了,有史以来最优雅的代码之一
我很惊讶 MATLAB 没有对正整数幂进行平方取幂,因为该算法应该需要更少的乘法。我认为这样做的结果应该是数值误差累积的速度较慢。
指数的最佳加法链乘法是一个 NP 完全问题,因此不值得计算最小化乘法运算总数的乘法和求幂序列。