MATLAB: Looking for an example showing short-cirkuit (&&) superior to normal (&) operation

MATLABspeed

Basically i am just trying to figure out how much of an issue this is, speed increase-wise. But i havent been able to make an example showing why one should bother at all.
My example shows about even performance:
clear all;
clc;
%Number of random numbers generated
T = 5000000;
%Number of times experiment is repeated
N = 20;
%Timer variables for tic/toc
timer1 = zeros(N,1);
timer2 = zeros(N,1);
for j=1:N
y1 = zeros(T,1);
y2 = zeros(T,1);
x1 = normrnd(0,1,T,1);
x2 = normrnd(0,1,T,1);
x3 = normrnd(0,1,T,1);
x4 = normrnd(0,1,T,1);
%Short cirkuited loop
tic
for i = 1:T
if (x1(i)>0 && x2(i)>0 && x3(i)>0 && x4(i)>0)
y1(i) = 1;
end
end
timer1(j) = toc;
%standard loop
tic
for i = 1:T
if (x1(i)>0 & x2(i)>0 & x3(i)>0 & x4(i)>0)
y2(i) = 1;
end
end
timer2(j) = toc;
end
mean(timer1)
mean(timer2)

Best Answer

In my view, the short-circuit behaviour of && and is not primarily about speed, but more about code readability and ease of code maintenance:
  • The expression A && B forces you to express A and B in full, so that both are convertible to logical scalar values.
  • The expression A & B allows for many misinterpretations, especially when they are vectors.
Example:
x = [true false] ; y = [ true true]
tf = any(x) && all(x) % easy to interpret
tf = x & y % ??