PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Geht das überhaupt?



Ypsilon
25-09-2002, 14:45
Hi Leute,

Ein Kumpel hat mir das gestern so schön erklärt, was die Unterschiede zwischen short, long, double, unsigned, etc. sind.
(Bisher dachte ich immer "warum braucht man denn soviele seltsame Typen, man kann doch einfach für alles n double nehmen" :D).

Also wollte ich gleich mal austesten ob ich das richtig verstanden hab was er gesagt hat und hab zwei mini-Progrämmchen geschrieben, das eine heißt speedtest_short
und das andere speedtest_double.

speedtest_short sieht so aus:


int main(){
unsigned short k=65535;
unsigned int z;
for(unsigned short i=0;i<k;i++){
for(unsigned short j=0;j<k;j++){
z=i*j;
}
}
}


und speedtest_double so:


int main(){
double k=65535;
double z;
for(double i=0;i<k;i++){
for(double j=0;j<k;j++){
z=i*j;
}
}
}


Jetzt dachte ich, theoretisch müsste das erste ja schneller gehen.
Und dann sieht das aber so aus:



benni@linux ~/own/c++ $ time ./speedtest_short

real 3m41.849s
user 3m32.770s
sys 0m0.020s

benni@linux ~/own/c++ $ time ./speedtest_double

real 2m39.571s
user 2m33.940s
sys 0m0.010s



Ich habe bei beiden Programmen in der Zeit in der der Rechner dran gerechnet hat bewust nix gemacht (netmal die Maus bewegt).
Die Programme wurden exakt gleich kompiliert.

Warum ist jetzt das Programm mit den doubles schneller als das selbe mit short ints????
Das widerspricht irgendwie allem was ich da gestern gelernt habe.

:confused: :confused: :confused:

Ypsilon
25-09-2002, 15:52
Was ich jetzt festgestellt habe:

Wenn man die 2 Testproggis mit der gcc-Option -O3 (also volle Optimierung) kompiliert,
dann ist das Programm mit den shorts doppelt so schnell wie das mit den doubles.

Sind ints also nur doubles vorzuziehen wenn man das Programm optimiert kompiliert? :confused: :eek: :confused:

anda_skoa
25-09-2002, 17:28
Du sollest immer das benutzen, was für den Zweck besser ist.

Zum Beispiel kannst du mit double einen viel größeren Zahlen Bereich darstellen, während int dafür immer die gleiche Präzession hat.

short zu verwenden bringt meistens nicht viel.
Es muß nicht kürzer als int sein.

Ciao,
_

Bonifaz
25-09-2002, 21:13
Kann aber auch noch sein, dass es dran liegt, dass du einfach in beiden Fällen z nicht initialisiert hast...?

nobody0
26-09-2002, 23:12
Ich hatte mal einen Test mit float statt double in Formeln gemacht und mit float war es ungefähr halb so schnell, obwohl ungenauer! Und mit double ist es so schnell wie mit long double.

Die Erklärung ist aber naheliegend: intern rechnen die CPUs mit 80 oder mehr Bit, also long double, so dass long doulbe nicht mehr Rechenzeit benötigt. Die Konvertierung nach float erklärt auch warum es mit float langsamer ist.

PeterTheMaster
27-09-2002, 06:54
bonifaz: unsinn
Y: sieh dir doch mal an (bzw zeig mal) was der compiler optimiert und unoptimiert aus beiden macht.