log(a * b)应该总是更快,因为计算对数是昂贵的.在log(a * b)中,你只需要执行一次,在log(a)log(b)中执行两次.
与对数,指数等相比,计算乘积和总和是微不足道的.就处理器周期而言,总和和乘积通常都小于5,而对于某些架构,指数和对数可以从50到200个周期.
Is log (a*b*…*z) always faster than log(a) + log(b) + … + log(z)
是.当然.尽可能避免计算对数.
这是一个小实验:
a=rand(5000000,1);
% log(a(1)*a(2)...)
tic
for ii=1:100
res=log(prod(a));
end
toc
% Elapsed time is 0.649393 seconds.
% log(a(1))+log(a(2))+...
tic
for ii=1:100
res=sum(log(a));
end
toc
% Elapsed time is 6.894769 seconds.
在某些时候,时间比率会饱和.它饱和的地方取决于您的处理器架构,但差异至少是一个数量级.