Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Geht das überhaupt?

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.12.2001
    Beiträge
    8

    Question Seltsam...

    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" ).

    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:
    Code:
    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:
    Code:
    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:

    Code:
    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.

    Geändert von Ypsilon (25-09-2002 um 16:44 Uhr)
    - Gentoo, Kernel 2.6.2, gcc 3.3.2, KDE 3.2, reiserFS ______ Bitte besucht meine Homepage:

    www.matzeundbenni.de

  2. #2
    Registrierter Benutzer
    Registriert seit
    04.12.2001
    Beiträge
    8
    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?
    Geändert von Ypsilon (25-09-2002 um 16:45 Uhr)
    - Gentoo, Kernel 2.6.2, gcc 3.3.2, KDE 3.2, reiserFS ______ Bitte besucht meine Homepage:

    www.matzeundbenni.de

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Bonifaz
    Gast
    Kann aber auch noch sein, dass es dran liegt, dass du einfach in beiden Fällen z nicht initialisiert hast...?

  5. #5
    Registrierter Benutzer
    Registriert seit
    22.03.2001
    Beiträge
    650
    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.

  6. #6
    Registrierter Benutzer
    Registriert seit
    27.09.2002
    Beiträge
    6
    bonifaz: unsinn
    Y: sieh dir doch mal an (bzw zeig mal) was der compiler optimiert und unoptimiert aus beiden macht.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •