Is tic/toc really reliable?
이전 댓글 표시
Hello,
I am comparing 3 ways of calculating a simple stuff (cutting b in half until b<a), and tic/toc gives me VERY improbable results.
Here is my entire code (R2014b):
_____________________________________________
function [W,L,LC]=while_vs_log(a,b)
% test which one of a log2 and a while loop is the fastest to reduce b until it unders a.
if (b<a) fprintf('b must be >= a\n'); return; end
if (a<=0) fprintf('a must be >0\n'); return; end
%%log compact
ticLC = tic;
LC = b/2^ceil(log2(b/a));
tocLC = toc(ticLC);
%%log
ticL = tic;
n = ceil(log2(b/a));
L = b/2^n;
tocL = toc(ticL);
%%while
ticW = tic;
while (b>a) b=b/2; end
W=b;
tocW = toc(ticW);
%%compare
fprintf('while loop : %e µs\n', 1e6*tocW);
fprintf('log2 : %e µs\n', 1e6*tocL);
fprintf('log2 compact: %e µs\n\n',1e6*tocLC);
end
_____________________________________________
I called the function several times, changing absolutely nothing between each call.
Have a look at the output: sometimes, the while loop and the log2 computation appear to take the EXACT same time, which is absolutely unlikely.

My question is: how can it be? And how can I trust tic/toc if it sometimes fail? Or do I use it the wrong way?
댓글 수: 4
William Frane
2014년 12월 5일
When using tic/toc to time relatively simple code, it's typical to run the code N times (for large values of N) between tic and toc and then calculate the average time. See the section "Time Smaller Sections of Code" on this page.
C.J. Harris
2014년 12월 5일
Also depends on your operating system. Unless you are using a real-time operating system you are going to get jitter which is much larger than the microsecond time-scales you are trying to measure.
B. C.
2014년 12월 5일
Andrew Newell
2014년 12월 5일
답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Language Fundamentals에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!