Hallo,
ich habe folgende Frage,
wann lohnt es sich das Ergebnis einer Multiplikation/Division
in eine Variable zu speichern anstatt das Ergebnis neu zu Berechnen?
Bzw. unter welchen Umständen ist eine Neuberechnung schneller
als eine Wertzuweisung zu einer Variablen und deren Folgen wie Zugriff auf den Inhalt
der Variable (vermutlich auch noch wenn dieser erst umständlich aus dem Hauptspeicher zu holen ist anstatt aus einem Register) .
Um das kurz zu verdeutlichen habe ich hier folgenden Algorithmus (C++ Code),
er berechnet die Verbleibenden Tage nach Abzug der Jahre und
berücksichtig dabei ganz grob die Schaltjahre:
Code:
ergebnis = (tage - ( (( (tage/365) / 4)*366) + ( ((tage/365) - ( (tage/365) /4)) *365) ))
Die Variable "tage" enthält sämtliche vergangenen Tage zwischen einem bestimmten Zeitraum (der auch über mehrere Jahre hinweg gehen kann).
Z.b. tage = 3000;
(mit einer For Schleife wäre das ganze vermutlich wegen den Schaltjahren genauer, aber das soll jetzt hier erstmal nur als Beispiel dienen)
Wie man sieht wird hier im selben Algorithmus mehrmals berechnet wieviele Jahre
in den Wert von "tage" hineinpassen, daher stellt sich die Frage ob man diese Berechnung nicht einfach nur einmal durchführt und dann einer Variable zuweißt um
dann mit dieser weiterzurechnen.
Z.b. so:
Code:
jahre= tage/365;
ergebnis = (tage - ( (( jahre/4)*366) + (( jahre - (jahre/4)) * 365) ));
Hier würde man sich also 2 weitere Divisionen sparen,
da das Ergebnis in "jahre" enthalten ist.
Das könnte man dann noch weiterverfeindern und die Berechnung der Anzahl der Schaltjahre ebenfalls nochmal in eine Variable speichern:
Code:
jahre= tage/365;
schaltjahre = jahre/4;
ergebnis = (tage - ( (schaltjahre*366) + ((jahre - schaltjahre)*365) ) ):
Hier hätte man dann 2+1, also 3 Divisionen gespart.
Was ist also schneller, 3 Divisionen extra zu berechnen oder das Speichern der Werte in Variablen und den damit eventuell resultierenden Zugriff auf den Hauptspeicher,
das anlegen von Platz für die Variable im Speicher sowie das umkopieren des Wertes vom Hauptspeicher zu einem Register etc.?
Lesezeichen