Ich analysierte das folgende Programm mit Matlab profile
. Double und Uint64 sind 64-Bit-Variablen. Warum vergleicht man zwei Double viel schneller als zwei Uint64 zu vergleichen? Werden sie nicht beide bitweise verglichen?Warum ist das Vergleichen doppelt schneller als 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;
Dies ist die Messung des Profils:
Dies ist, was TicToc Maßnahmen:
Elapsed time is 6.259040 seconds.
Elapsed time is 0.015387 seconds.
Der Effekt verschwindet, wenn uint8..uint32 oder int8..int32 sind verwendet anstelle von 64-Bit-Datentypen.
Ich weiß nicht über Matlab, aber häufig Doppel werden verglichen, um zu sehen, ob sie innerhalb einer Entfernung Epsilon voneinander sind. Das macht den Vergleich mühsamer. –
@EricJ. Nicht der Fall in Matlab, fürchte ich. Auch etwas verwirrt von dieser Frage. – jazzbassrob
von Ihren Ergebnissen sieht es aus wie Vergleichen Doppel ist viel schneller als Uint64 – Jonas