Zitat von: Osbios
Code: [Auswählen]X = sin(y)/pi+pi*360
if Bedingung1 then A = X
kann vom Compiler ganz einfach in
Code:Code: [Auswählen]if Bedingung1 then A = sin(y)/pi+pi*360
umgewandelt werden.
was machst du mit folgendem?
Code: [Auswählen]
X = sin(y)/pi+pi*360
if Bedingung1 then A = X
print(X)und diesem hier?
Code: [Auswählen]
X = sin(y)/pi+pi*360
if X < 100 then A = Xund woher weisst du dass sin(y) nicht vielleicht mehr macht, als nur einen wert zurückzugeben? vielleicht schreibt es was auf den monitor oder so.
und was machst du hiermit:
Code: [Auswählen]
X = 1/sin(y)
if Bedingung1 then A = Xunter bestimmten bedingungen wird sin(y) gleich 0 und es gibt eine divide-by-zero-exceptionen. was, wenn das programm in diesem fall auch genau eine exception braucht?
Code: [Auswählen]
if Bedingung1 then A = 1/sin(y)dieser code kann nur dann eine divide-by-zero-exception auslösen, wenn auch Bedingung1 erfüllt ist. die beiden code abschnitte sind also nicht gleichwertig.
Zitat von: Osbios
Aber was ist in einem solchen Fall:Code: [Auswählen]X = sin(y)/pi+pi*360
if Bedingung1 then A = X
if Bedingung2 then B = X
Code: [Auswählen]
if Bedingung1 or Bedingung2 then X = sin(y)/pi+pi*360
if Bedingung1 then A = X
if Bedingung2 then B = Xoder besser:
Code: [Auswählen]
if Bedingung1 or Bedingung2 then
X = sin(y)/pi+pi*360
if Bedingung1 then A = X
if Bedingung2 then B = X
end if
aber was wenn Bedingung1 oder Bedingung2 sehr kompliziert sind? z.B. Bedingung1 ist "(x < 500 * y - sin(alpha) + cos(beta))" und Bedingung2 ist "(customfunction(a, b, c) == d)"
Code: [Auswählen]
if (x < 500 * y - sin(alpha) + cos(beta)) or (customfunction(a, b, c) == d) then X = sin(y)/pi+pi*360
if (x < 500 * y - sin(alpha) + cos(beta))then A = X
if (customfunction(a, b, c) == d) then B = Xoptimiert sähe das so aus:
Code: [Auswählen]
bool TempBedingung1 = (x < 500 * y - sin(alpha) + cos(beta))
bool TempBedingung2 = (customfunction(a, b, c) == d)
if TempBedingung1 or TempBedingung2 then
X = sin(y)/pi+pi*360
if TempBedingung1 then A = X
if TempBedingung2 then B = X
end ifoder noch besser:
Code: [Auswählen]
if (x < 500 * y - sin(alpha) + cos(beta)) then
A = sin(y)/pi+pi*360
if (customfunction(a, b, c) == d) then B = A
else if (customfunction(a, b, c) == d) then B = A
B = sin(y)/pi+pi*360
end ifwas aber tust du bei folgendem code (ich nehm den weil er simpler als die anderen ist):
Code: [Auswählen]
X = customfunction(y)*sin(y)/pi+pi*360
if Bedingung1 then A = Xwenn du den so optimierst:
Code: [Auswählen]
if Bedingung1 then A = customfunction(y)*sin(y)/pi+pi*360wird customfunction() nur noch aufgerufen, wenn Bedingung1 erfüllt ist. was ist wenn customfunction() mehr macht als nur den rückgabewert zu schreiben?
sowas?
Code: [Auswählen]
if Bedingung1 then A = customfunction(y)*sin(y)/pi+pi*360 else (void)customfunction(y)oder das?
Code: [Auswählen]
temp = customfunction(y)
if Bedingung1 then A = temp*sin(y)/pi+pi*360wie du siehst gibt es milliarden von sonderfällen. du hast ein paar erwischt, die vielleicht optimierbar sind. aber wirst du die auch in der echten welt an den stellen, die wirklich performancekritisch sind, antreffen?
ich habe mir auch ein paar gedanken gemacht, wie ich einen (normalen) compiler optimieren könnte, und bin zu dem entschluss gekommen, dass meine ideen höchstens den code von unfähigen programmieren optimieren könnten (wenn überhaupt) und _wirkliche_ optimierungen nicht vollbringen werden können. ich habe mich nur soweitgehend damit beschäftigt, bis ich davon überzeugt war, dass sowas anderen zu überlassen und mich mit interessanteren dingen zu beschäftigen sinnvoller ist. vielleicht hast du ja bessere ideen und mehr ausdauer als ich. mit deinen beispielen wirst du allerdings nicht sehr weit kommen. sie beschränken sich auf ein paar mathematische formeln. die wenigsten programme bestehen nur aus formeln. es gibt noch schleifen, globale variablen, funktionsübergreifene strukturen (einfachstes beispiel: parameter), rekursionen, etc. diese sachen sind deutlich schwerer zu optimieren. richtig spaßig wirds auch erst, wenn du für multicore-cpus optmierst.


Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert


