Ho analizzato il seguente programma utilizzando Matlab profile
. Sia double che uint64 sono variabili a 64 bit. Perché il confronto di due doppi è molto più veloce rispetto al confronto di due uint64? Non sono entrambi paragonati per bit?Perché il confronto è doppio più veloce di uint64?
big = 1000000;
a = uint64(randi(100,big,1));
b = uint64(randi(100,big,1));
c = uint64(zeros(big,1));
tic;
for i=1:big
if a(i) == b(i)
c(i) = c(i) + 1;
end
end
toc;
a = randi(100,big,1);
b = randi(100,big,1);
c = zeros(big,1);
tic;
for i=1:big
if a(i) == b(i)
c(i) = c(i) + 1;
end
end
toc;
Questa è la misura del profilo:
Questo è ciò che le misure Tictoc:
Elapsed time is 6.259040 seconds.
Elapsed time is 0.015387 seconds.
L'effetto scompare quando uint8..uint32 o int8..int32 sono utilizzato al posto dei tipi di dati a 64 bit.
Non so di Matlab, ma spesso i doppi vengono confrontati per vedere se sono a una distanza epsilon l'uno dall'altro. Ciò rende il confronto più macchinoso. –
@EricJ. Non è il caso in MATLAB, ho paura. Anche un po 'confuso da questa domanda. – jazzbassrob
dai risultati sembra che il confronto dei doppi sia molto più veloce di uint64 – Jonas