atand(x) very much slower than atan(x)!?
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Today I used atand(x) and atan(x). To my great surprise atand(x) was not just a little bit slower than atan(x) but is incredibly slow compared to atan(x)?
I tried to verify this by using the code below. First a time measurement for atan(x), than for atan(x) multiplied with 360/2/pi to go to degrees and finally one loop for atand(x). The results I found were:
Elapsed time is 0.047019 seconds. -> atan(x)
Elapsed time is 0.062016 seconds. -> atan(x)*360/2/pi
Elapsed time is 4.166911 seconds. -> atand(x)
And finally a test to check if atand(x) yielded identical results to atan(x) which was 'true' for all arguments tested.
This would mean that one should never use atan2d because atan2(x)*360/2/pi is much and much quicker? Why is there even a atan2d(x) function or why is it so slow?
Kind regards,
Ernst Jan Grift
clear all
n=1000000;
x_rad=zeros(1,n);
x_rad_to_d=zeros(1,n);
x_d=zeros(1,n);
arg=rand(1,n);
tic
for i=1:n
x_rad(i)=atan(arg(n));
end
toc
tic
for i=1:n
x_rad_to_d(i)=atan(arg(n))*360/2/pi;
end
toc
tic
for i=1:n
x_d(i)=atand(arg(n));
end
toc
same=x_rad_to_d==x_d;
all(same)
0 Kommentare
Akzeptierte Antwort
Weitere Antworten (1)
Matt J
am 28 Mär. 2013
Bearbeitet: Matt J
am 28 Mär. 2013
Your observation is interesting, but I don't think the conclusion is that you should never use ATAND, but only that it hasn't been well-optimized for the JIT yet, and shouldn't be used in for-loops. When vectorized, its performance is fine,
n=1e7;
arg=rand(1,n);
tic
x_rad=atan(arg);
toc
%Elapsed time is 0.106370 seconds.
tic
x_rad_to_d=atan(arg)*180/pi;
toc
%Elapsed time is 0.111417 seconds.
tic
x_d=atand(arg);
toc
%Elapsed time is 0.115595 seconds.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!